共用方式為


_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