Share via


_mbclen, mblen, _mblen_l, _mbclen_l

取得長度,並判斷多位元組字元的有效性。

重要

這個 API 不能用於在 Windows 執行階段中執行的應用程式。 如需詳細資訊,請參閱 CRT functions not supported in Universal Windows Platform apps (通用 Windows 平台應用程式中不支援的 CRT 函式)。

語法

size_t _mbclen(
   const unsigned char *c
);
size_t _mbclen_l(
   unsigned char const* c,
   _locale_t locale
);
int mblen(
   const char *mbstr,
   size_t count
);
int _mblen_l(
   const char *mbstr,
   size_t count,
   _locale_t locale
);

參數

c
多位元組字元。

mbstr
多位元組字元位元組序列的位址。

count
要檢查的位元組數目。

locale
要使用的地區設定。

傳回值

_mbclen_mbclen_l 會根據多位元組字元 c 的長度傳回 1 或 2。 不論 是否 c 為多位元組,函式一律會傳回 UTF-8 的 1。 不會傳 _mbclen 回 任何錯誤。

如果 mbstr 不是 NULLmblen_mblen_l 傳回多位元組字元的長度,以位元組為單位。 和 _mblen_lmblen 式在 UTF-8 上正常運作,而且可能會傳回介於 1 到 3 之間的值。 當 mbstrNULL 時(或指向寬字元 Null 字元), mblen_mblen_l 傳回 0。 指向 的物件 mbstr 必須在第一 count 個字元內形成有效的多位元組字元,或 mblen_mblen_l 回 -1。

備註

_mbclen 函式會傳回多位元組字元 c 的長度 (以位元組為單位)。 如果 c 未指向多位元組字元的前置位元組(如隱含呼叫 _ismbblead 所決定,則的結果 _mbclen 無法預測。

mblen 如果長度為有效的多位元組字元,則傳回 的位元組 mbstr 長度。 它也會決定與字碼頁相關聯的多位元組字元有效性。 mblen 會檢查 mbstr 中所包含的 count 個或更少個位元組,但不得超過 MB_CUR_MAX 個位元組。

輸出值會受到 LC_CTYPE 地區設定的類別設定影響。 沒有 _l 尾碼的這些函式版本會針對這個地區設定相依的行為使用目前的地區設定。 _l後置版本的行為相同,但它們會改用傳入的地區設定參數。 如需詳細資訊,請參閱 setlocale 地區設定

_mbclen_mblen_l_mbclen_l 是 Microsoft 特定的,不是標準 C 程式庫的一部分。 建議您不要在想要可攜式程式碼的地方使用這些程式碼。 針對標準 C 相容性,請改用 mblenmbrlen

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。

泛型文字常式對應

Tchar.h 常式 _UNICODE_MBCS 未定義 _MBCS 定義 _UNICODE 定義
_tclen 巨集或內嵌函式的對應 _mbclen 巨集或內嵌函式的對應

需求

常式 必要的標頭
_mbclen <mbstring.h>
mblen <stdlib.h>
_mblen_l <stdlib.h>

如需相容性詳細資訊,請參閱相容性

範例

// crt_mblen.c
/* illustrates the behavior of the mblen function
*/

#include <stdlib.h>
#include <stdio.h>

int main( void )
{
    int      i;
    char    *pmbc = (char *)malloc( sizeof( char ) );
    wchar_t  wc   = L'a';

    printf( "Convert wide character to multibyte character:\n" );
    wctomb_s( &i, pmbc, sizeof(char), wc );
    printf( "   Characters converted: %u\n", i );
    printf( "   Multibyte character: %x\n\n", *pmbc );

    i = mblen( pmbc, MB_CUR_MAX );
    printf( "Length in bytes of multibyte character %x: %u\n", *pmbc, i );

    pmbc = NULL;
    i = mblen( pmbc, MB_CUR_MAX );
    printf( "Length in bytes of NULL multibyte character %x: %u\n", pmbc, i );
}
Convert wide character to multibyte character:
   Characters converted: 1
   Multibyte character: 61

Length in bytes of multibyte character 61: 1
Length in bytes of NULL multibyte character 0: 0

另請參閱

字元分類
地區設定
多位元組字元序列的解譯
_mbccpy, _mbccpy_l
mbrlen
strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen, _mbstrlen_l