Skip to content

Latest commit

 

History

History
71 lines (51 loc) · 2.2 KB

File metadata and controls

71 lines (51 loc) · 2.2 KB

wctomb

  • cstdlib[meta header]
  • std[meta namespace]
  • function[meta id-type]
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;
}
  • std::wctomb[color ff0000]
  • MB_CUR_MAX[link mb_cur_max.md]
  • LC_ALL[link /reference/clocale/lc_all.md]
  • std::setlocale[link /reference/clocale/setlocale.md]

出力例

3

バージョン

言語

  • C++98

関連項目