MBRLEN(3) | FreeBSD Library Functions Manual | MBRLEN(3) |
名称
mbrlen — 文字のバイト数を取得する (再開始可能)ライブラリ
Standard C Library (libc, -lc)解説
mbrlen() 関数は、次のマルチバイト文字を完成するのに必要なバイト数を決定するために s によって指された多くても n バイトを検査します。mbstate_t 引数、 ps は、シフト状態の経過を追うために使用されます。それが NULL, であるなら、 mbrlen() は、プログラム開始時に初期の変換状態に初期化される、内部の静的な mbstate_t オブジェクトを使用します。
それは、次と同等です:
mbrtowc(NULL, s, n, ps);
ps が NULL ポインタであるときを除いて、 mbrlen() は、シフト状態の経過を追うために、それ自体の静的で内部の mbstate_t オブジェクトを使用します。
戻り値
mbrlen() 関数は、次を返します:- 0
-
次の
n か、小数のバイトはヌルワイド文字 (
L'\0'
) を表します。 - >0
- 次の n か、小数のバイトは有効な文字を表し、 mbrlen() は、マルチバイト文字を完結するために使用されるバイト数を返します。
- ( size_t)-2
- 次の与えられた n は、完結していませんが、有効なマルチバイト文字シーケンスとすべての n バイトは、処理されています。
- ( size_t)-1
- コード化のエラーが発生しました。次の n か、小数のバイトは有効なマルチバイト文字が与えれらていません。
使用例
マルチバイト文字列で文字の数を計算する関数:
size_t nchars(const char *s) { size_t charlen, chars; mbstate_t mbs; chars = 0; memset(&mbs, 0, sizeof(mbs)); while ((charlen = mbrlen(s, MB_CUR_MAX, &mbs)) != 0 && charlen != (size_t)-1 && charlen != (size_t)-2) { s += charlen; chars++; } return (chars); }
エラー
mbrlen() 関数は、次の場合に失敗します:- [ EILSEQ]
- 無効のマルチバイトシーケンスが検出されました。
- [ EINVAL]
- 変換状態は無効です。
規格
mbrlen() 関数は、 ISO/IEC 9899:1999 (“ISO C99”) に適合しています。April 7, 2004 | FreeBSD |