_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
不是 NULL
, mblen
則 _mblen_l
傳回多位元組位元的長度,以位元組為單位。 和 _mblen_l
函mblen
式在UTF-8上正常運作,而且可能會傳回介於1到3之間的值。 當 mbstr
為 NULL
時(或指向寬字元 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 相容性,請改用 mblen
或 mbrlen
。
根據預設,此函式的全域狀態會限定於應用程式。 若要變更此行為,請參閱 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