获取长度并确定多字节字符的有效性。
重要
此 API 不能用于在 Windows 运行时中执行的应用程序。 有关详细信息,请参阅通用 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。 对于 UTF-8,无论 c
是否为多字节,这些函数始终返回 1。 _mbclen
没有返回错误。
如果 mbstr
不是 NULL
,则 mblen
和 _mblen_l
返回多字节字符的字节长度。 mblen
和 _mblen_l
函数在 UTF-8 中正常工作,并且可能会返回一个介于 1 和 3 之间的值。 当 mbstr
是 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
另请参阅
字符分类
区域设置
多字节字符序列的解释
%>
mbrlen