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