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
関連項目
mbtowc: 逆方向の変換wcstombs: 文字列全体を変換するMB_CUR_MAXstd::wcrtomb():std::mbstate_tを受け取るスレッドセーフなバージョン