標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C 改訂 |
両方 |
#include <wchar.h>
size_t mbrlen(const char * __restrict__s, size_t n, mbstate_t * __restrict__ps);
#define _XOPEN_SOURCE
#define _MSE_PROTOS
#include <wchar.h>
size_t mbrlen(const char *s, size_t n, mbstate_t *ps);
mbrtowc((wchar_t *)0, s, n, ps != NULL ? ps : &internal);
この場合、&internal は、mbrlen() 関数の 内部 mbstate_t オブジェクトのアドレスです。
mbrlen() は mblen() の再始動可能バージョンです。つまり、シフト状態情報は引数の 1 つとして渡され、終了時に更新されます。mbrlen() を使用すると、シフト状態の情報を保持している場合、あるマルチバイト・ストリングから別の マルチバイト・ストリングに切り替えることができます。
このワイド文字関数の動作は、現行ロケールの LC_CTYPE カテゴリーの影響を受けます。 カテゴリーを変更すると、未定義の結果が発生する可能性があります。
XPG4 の特殊な動作
プログラム・ソース・ファイル内の wchar ヘッダーをインクルードするステートメントより前に、XPG4 の 動作を指定してフィーチャー・テスト・マクロを定義した場合には、_MSE_PROTOS フィーチャー・テスト・マクロも定義して、プログラムのコンパイル時に使用可能な wchar ヘッダーの mbrlen() 関数の宣言を行う必要があります。XPG4 と他のフィーチャー・テスト・マクロのリストについては、表 1 を参照してください。
s が NULL ポインターである場合、mbrlen() は、シフト状態を初期シフト状態にリセットして、0 を戻します。
⁄* CELEBM03 *⁄
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main(void)
{
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 in bytes of a multibyte character pointed *⁄
⁄* to by mbs. *⁄
length = mbrlen(mbs, MB_CUR_MAX, &ss);
printf(" length: %d ¥n", length);
printf(" mbs:¥"%s¥"¥n", mbs);
printf("MB_CUR_MAX: %d ¥n", MB_CUR_MAX);
printf(" ss: %d ¥n", ss);
}
length: 1
mbs:"a"
MB_CUR_MAX: 4
ss: 0