標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C |
両方 |
#include <stdlib.h>
size_t mbstowcs(wchar_t * __restrict__pwc, const char* __restrict__string, size_t n);
初期シフト状態で開始し、string で示される マルチバイト文字のシーケンスの長さを判別します。そのあと、それぞれのマルチバイト文字 が wchar_t に変換され、pwc が指す 配列にコードが n 個まで保管されます。無効なマルチバイト・シーケンスが検出される か、n コードが変換されると、変換は停止します。
処理は、終了の NULL 文字 (これを含む) まで続行し、そのあとに続く文字は処理されません。終了の NULL 文字は 0 の値のコードに変換されます。
このワイド文字関数の動作は、現行ロケールの LC_CTYPE カテゴリーの影響を受けます。 カテゴリーを変更すると、未定義の結果が発生する可能性があります。
pwc が NULL ポインターの場合、mbstowcs() は n の値にかかわらず配列全体を変換するために必要な長さを戻しますが、保管される値はありません。
正常に実行された場合、mbstowcs() は、変更された (または pwc がヌルの場合には必要な) pwc 配列エレメントの数を戻します。この数には、終了 0 コード (wchar_t 0 コード) は、含まれません。戻り値が n の場合、その結果の wchar_t 配列は NULL 終了には なりません。
無効なマルチバイト文字が検出されると、mbstowcs() は (size_t)-1 を戻します。
⁄* CELEBM07
This example uses &mbstowcs. to convert a multibyte character
string to a wide character string.
*⁄
#include <stdio.h>
#include <stdlib.h>
int main()
{
char mbsin[8] = "¥x50¥x0e¥x42¥xf1¥x0f¥x50¥x00";
wchar_t wcsout[5];
size_t wcssize;
printf("mbsin is 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x¥n",
mbsin[0], mbsin[1], mbsin[2],
mbsin[3], mbsin[4], mbsin[5],
mbsin[6]);
wcssize = mbstowcs(wcsout, mbsin, 5);
printf("mbstowcs(wcsout, mbsin, 5); returned %d¥n", wcssize);
printf("wcsout is 0x%.4x 0x%.4x 0x%.4x 0x%.4x¥n",
wcsout[0], wcsout[1],
wcsout[2], wcsout[3]);
}
mbsin is 0x50 0x0e 0x42 0xf1 0x0f 0x50 0x00
mbstowcs(wcsout, mbsin, 5); returned 3
wcsout is 0x0050 0x42f1 0x0050 0x0000