_mbclen, mblen, _mblen_l, _mbclen_l

获取长度并确定多字节字符的有效性。

重要

此 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 之间的值。 当 mbstrNULL,或其指向宽字符空字符,则 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
strlenwcslen_mbslen_mbslen_l_mbstrlen_mbstrlen_l