最終更新日時:
が更新

履歴 編集

function
<cstdlib>

std::wctomb

namespace std {
  int wctomb(char* s, wchar_t wc);
}

概要

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

wcをマルチバイト文字へ変換し、sが指す配列へ書き込む。書き込まれるバイト数は最大でMB_CUR_MAXである。

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

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

戻り値

  • sがヌルポインタの場合、内部状態を初期化する。現在のエンコーディングが状態を持つ場合は非ゼロの値を返し、それ以外の場合は0を返す
  • 正常に変換できた場合、書き込んだバイト数を返す
  • wcが現在のロケールで表現できない場合、-1を返す

備考

  • この関数は静的記憶域の内部状態を保持するため、スレッドセーフではない
  • 書き込み先の配列は、MB_CUR_MAXバイト以上の大きさをもたなければならない

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

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

  char buffer[MB_CUR_MAX];

  // UTF-8では3バイトへ変換される
  int n = std::wctomb(buffer, L'あ');

  std::cout << n << std::endl;
}

出力例

3

バージョン

言語

  • C++98

関連項目