mbrlen
現在のロケールを使用中のマルチバイト文字の途中で必要に応じて再起動機能の文字列のバイト数を確認します。
size_t mbrlen(
const char *str,
size_t maxSize,
mbstate_t mbstate
);
パラメーター
str
NULL で終わる文字列。maxSize
終端の NULL 文字を除いた文字列の最大サイズ。mbstate
変換の状態。
戻り値
文字列の長さが maxSize 文字未満の場合これらの関数は終了 NULL を除く str の文字数を返します。文字列の長さが maxSize の文字を超える場合maxSize が返されます。
0
次のいくつかのバイト数が NULL のワイド文字を表すマルチバイト文字を実行します。> 0
次のいくつかのバイト数が有効なマルチバイト文字が完了すると戻り値はマルチバイト文字を実行するバイト数です。-1
次のバイト数が不完全なマルチバイトすべてのバイト数に関係して処理されます。-2
エンコーディング エラーが発生した場合は次のいくつかのバイト数が完了すると有効なマルチバイト文字で使用する値のerrno の値は EILSEQ とあいまいな変換状態です。
解説
mbrlen の関数はのマルチバイト文字の途中で maxSize バイトは最大でチェックして必要に応じて再起動機能が str のマルチバイト文字のシーケンスを構成するバイト数を指定します。mbstate_t の引数が mbstate Shift キーの状態を追跡するために使用されます。が null の場合mbrlen は mbstate_t の内部静的オブジェクトを使用します。これはと同じです :
mbrtowc(NULL, str, maxSize, mbstate)
mbstate の例に NULL の場合mbrlen が独自の静的に依存する以外Shift キーの状態を追跡する mbstate_t 内部オブジェクト。
mbrlen の関数は restartability によって _mbclen、mblen、_mblen_l とは異なります。変換は同じ状態またはそのほかの restartable 関数への後続の呼び出しの mbstate に格納されます。結果は restartable と nonrestartable 関数の使用を使用すると未定義です。たとえばアプリケーションが wcsrtombs に wcslen ではなく wcstombs. の代わりに使用されている場合後続の呼び出し wcsrlen を使用します。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
n/a |
n/a |
mbrlen |
n/a |
必要条件
ルーチン |
必須ヘッダー |
---|---|
mbrlen |
<wchar.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_mbrlen.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <wchar.h>
size_t Example(const char * pStr)
{
size_t charLen = 0;
size_t charCount = 0;
mbstate_t mbState;
memset(&mbState, 0, sizeof(mbState));
while ((charLen = mbrlen(pStr, MB_CUR_MAX, &mbState)) != 0 &&
charLen != (size_t)-1 && charLen != (size_t)-2)
{
pStr += charLen;
charCount++;
}
return (charCount);
}
int main( void )
{
size_t charCount = 0;
const char *pSample = "Every good boy does fine.";
charCount = Example(pSample);
printf("%s\nLength: %d\n", pSample, charCount);
}