フォーマット
#include <wchar.h> size_t mbsrtowcs (wchar_t *dst, const char **src, size_t len, mbstate_t *ps);
言語レベル: ANSI
スレッド・セーフ: はい (ps が NULL 以外の場合)。
ロケール依存: この関数の振る舞いは、 現行ロケールの LC_CTYPE カテゴリーの影響を受ける可能性があります。 この関数は、LOCALETYPE(*LOCALEUCS2) または LOCALETYPE(*LOCALEUTF) をコンパイル・コマンドで指定した場合も、現行ロケールの LC_UNI_CTYPE カテゴリーによって影響を受ける可能性があります。 この関数は、コンパイル・コマンドに対して LOCALETYPE(*CLD) が指定されている場合には使用できません。詳細については、CCSID およびロケールの理解を参照してください。
ワイド文字関数: 詳細については、ワイド文字 を参照してください。
説明
この関数は、mbstowcs() の再始動可能バージョンです。
mbsrtowcs() 関数は、src が間接的に指す配列から、ps が記述する変換状態で始まるマルチバイト文字のシーケンスを、対応するワイド文字に変換します。 次に、dst で示される配列に、変換された文字を保管します。
変換は終了のヌル文字 (これを含む) まで続行し、このヌル文字も保管されます。 変換は次の 2 つの場合、早期に停止します。すなわち、有効なマルチバイト文字を形成しないバイトのシーケンスに達したとき、または (dst が NULL ポインターでない場合に) len ワイド文字が、dst が指す配列に保管されたときです。 それぞれの変換は、mbrtowc() 関数への呼び出しの場合と同様に行われます。
dst が NULL ポインターでない場合、src が指すポインター・オブジェクトには、NULL ポインターが割り当てられる (終了のヌル文字に達したために変換が停止した場合) か、変換された最後のマルチバイト文字の直後のアドレスが割り当てられます。 終了のヌル文字に達したことにより変換が停止した場合は、初期変換状態が記述されます。
戻り値
入力ストリングが有効なマルチバイト文字で開始していない場合は、エンコード・エラーが発生し、mbsrtowcs() 関数がマクロ EILSEQ の値を errno に保管し、(size_t) -1 を戻しますが、変換状態は変更されません。 その他の場合は、正常に変換されたマルチバイト文字の数を戻しますが、これは、dst が NULL ポインターでないときに変更された配列エレメント数と同じです。
変換エラーが発生した場合、errno は ECONVERT に設定される可能性があります。
mbsrtowcs() の使用例
#include <stdio.h> #include <stdlib.h> #include <wchar.h> #include <locale.h> #define SIZE 10 int main(void) { char mbs1[] = "abc"; char mbs2[] = "¥x81¥x41" "m" "¥x81¥x42"; const char *pmbs1 = mbs1; const char *pmbs2 = mbs2; mbstate_t ss1 = 0; mbstate_t ss2 = 0; wchar_t wcs1[SIZE], wcs2[SIZE]; if (NULL == setlocale(LC_ALL, "/qsys.lib/locale.lib/ja_jp939.locale")) { printf("setlocale failed.¥n"); exit(EXIT_FAILURE); } mbsrtowcs(wcs1, &pmbs1, SIZE, &ss1); mbsrtowcs(wcs2, &pmbs2, SIZE, &ss2); printf("The first wide character string is %ls.¥n", wcs1); printf("The second wide character string is %ls.¥n", wcs2); return 0; } /******************************************************* The output should be similar to: The first wide character string is abc. The second wide character string is Am B. *******************************************************/
mbrtowc() — マルチバイト文字からワイド文字への変換 (再始動可能)の例も参照してください。
関連情報