最終更新日時:
が更新

履歴 編集

function
<cstdlib>

std::mbstowcs

namespace std {
  size_t mbstowcs(wchar_t* pwcs, const char* s, size_t n);
}

概要

マルチバイト文字列を、ワイド文字列へ変換する。

sが指す文字列を初期変換状態から順に変換し、pwcsが指す配列へ最大n文字を書き込む。終端のヌル文字に達した場合は、それも書き込まれる。

この関数は現在のロケールカテゴリLC_CTYPEに依存してマルチバイト文字を解釈する。

内部状態に依存するエンコーディングを考慮するならば、特に理由がない限り、この関数ではなくstd::mbstate_tを受け取るstd::mbsrtowcs()を新しいコードでは用いるべきである。

戻り値

  • 変換できた場合、書き込んだ文字数(終端のヌル文字を含まない)を返す
  • 不正なバイト列があった場合、(size_t)-1を返す

戻り値nと等しい場合、終端のヌル文字は書き込まれていない。

備考

  • pwcsがヌルポインタの場合、書き込みは行われず、変換に必要な文字数だけが返る。この性質を利用して、必要なバッファサイズを事前に求められる
  • 変換先と変換元の領域が重なっている場合、動作は未定義である

#include <clocale>
#include <cstdlib>
#include <iostream>

int main()
{
  std::setlocale(LC_ALL, "C.UTF-8");

  const char* s = "abc";

  // 必要な文字数を先に求める
  std::size_t len = std::mbstowcs(nullptr, s, 0);
  std::cout << len << std::endl;

  wchar_t buffer[8] = {};
  std::size_t n = std::mbstowcs(buffer, s, 8);
  std::cout << n << std::endl;
}

出力例

3
3

バージョン

言語

  • C++98

関連項目