標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C 改訂 |
両方 |
#include <wchar.h>
size_t mbrtowc(wchar_t * __restrict__pwc, const char * __restrict__s,
size_t n, mbstate_t * __restrict__ps);
#define _XOPEN_SOURCE
#define _MSE_PROTOS
#include <wchar.h>
size_t mbrtowc(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps);
mbrtowc() 関数は mbrtowc(NULL,"",1,ps) と同じです。
s が NULL ポインターである場合、mbrtowc() 関数は n と pwc を無視し、ps が示すシフト状態を初期シフト状態にリセットします。
s が NULL ポインターでない場合、mbrtowc() は、s が示すバイトから 始まる最大 n バイトと ps が示すシフト状態を検査して、有効なマルチバイト 文字を完成するのに必要なバイト数を判別します。
マルチバイト文字が完了すると、mbrtowc() は、対応するワイド文字の値を判別し、pwc が NULL ポインターでない限り、pwc が示すオブジェクトにその値を 保管します。最後に、mbrtowc() は ps が示すオブジェクトに 実際のシフト状態を保管します。ps が NULL ポインターである場合、mbrtowc() は独自の内部オブジェクトを使用してシフト状態をトラッキングします。
mbrtowc() は mbtowc() の再始動可能バージョンです。つまり、シフト状態情報は引数の 1 つとして渡され、終了時に更新されます。mbrtowc() を使用すると、シフト状態情報を 保持している場合に、あるマルチバイト・ストリングから別の マルチバイト・ストリングに切り替えることができます。
このワイド文字関数の動作は、現行ロケールの LC_CTYPE カテゴリーの影響を受けます。 カテゴリーを変更すると、未定義の結果になることがあります。
XPG4 の特殊な動作
プログラム・ソース・ファイル内の wchar ヘッダーをインクルードするステートメントより前に、XPG4 の 動作を指定してフィーチャー・テスト・マクロを定義した場合には、_MSE_PROTOS フィーチャー・テスト・マクロも定義して、プログラムのコンパイル時に使用可能な wchar ヘッダーの mbrtowc() 関数の宣言を行う必要があります。XPG4 と他のフィーチャー・テスト・マクロのリストについては、表 1 を参照してください。
s が NULL ポインターである場合、mbrtowc() は、シフト状態を初期シフト状態にリセットして、0 を戻します。
⁄* CELEBM04 *⁄
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main(void)
{
wchar_t wc;
char mbs[5] = "a"; ⁄* string containing the multibyte char *⁄
mbstate_t ss = 0; ⁄* set shift state to the initial state *⁄
int length;
⁄* Determine the length of the multibyte character pointed to by *⁄
⁄* mbs. Store the multibyte character in the wchar_t object *⁄
⁄* called wc. *⁄
length = mbrtowc(&wc, mbs, MB_CUR_MAX, &ss);
printf(" length: %d ¥n", length);
printf(" wc:'%lc'¥n", wc);
printf(" mbs:¥"%s¥"¥n", mbs);
printf("MB_CUR_MAX: %d ¥n", MB_CUR_MAX);
printf(" ss: %d ¥n", ss);
}