mbrlen
在多字节字符的元确定中的字节数一个字符串,以重新启动的功能,如果需要,在使用当前区域设置。
size_t mbrlen(
const char *str,
size_t maxSize,
mbstate_t mbstate
);
参数
str
null 终止的字符串。maxSize
字符串的最大大小,不包括终止 null 字符。mbstate
转换 shift 状态。
返回值
如果该字符串的长度 maxSize 字符小于,这些函数都返回一个字符数。 str的,不包括最终 NULL。 如果该字符串的长度 maxSize 字符大,则 maxSize 返回。
0
如果下次数或更低字节完成表示 NULL 宽字符的多字节字符。> 0
如果下次数或更低字节完成有效的多字节字符,返回的值是完成多字节字符的字节数。-1
如果下一个计数字节导致不完整的多字节和所有计数字节处理。-2
如果编码错误,,在下次数或更低字节不会导致完整有效的多字节字符情况下,值 errno 值将为 EILSEQ 和不明确转换的状态。
备注
mbrlen 函数确定构成 str的多字节字符序列的字节数,当重新启动的功能在多字节字符的元如果需要,检查最多 maxSize 字节。 mbstate_t 参数 mbstate 用于跟踪 shift 状态。 如果是空, mbrlen 使用内部,静态 mbstate_t 对象。 它等效于:
mbrtowc(NULL, str, maxSize, mbstate)
除,当用例 mbstate 是 NULL, mbrlen 取决于其自己的静态,内部 mbstate_t 对象记录 shift 状态。
mbrlen 功能与 _mbclen, mblen, _mblen_l 不同由其 restartability。 转换状态中的 mbstate 存储的后续调用相同或其他可重新启动的功能。 ,混合使用可重新启动和 nonrestartable 函数时,结果是未定义的。 例如,因此,如果以后对 wcsrtombs 效果位置而不是 wcstombs.,应用程序将使用 wcsrlen 而不是 wcslen
一般文本例程映射
TCHAR.H 实例 |
未定义的 _UNICODE _MBCS |
定义的 _MBCS |
定义的 _UNICODE |
---|---|---|---|
n/a |
n/a |
mbrlen |
n/a |
要求
实例 |
必需的头 |
---|---|
mbrlen |
wchar.h |
有关其他的兼容性信息,请参见中介绍的 兼容性 。
示例
// crt_mbrlen.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <wchar.h>
size_t Example(const char * pStr)
{
size_t charLen = 0;
size_t charCount = 0;
mbstate_t mbState;
memset(&mbState, 0, sizeof(mbState));
while ((charLen = mbrlen(pStr, MB_CUR_MAX, &mbState)) != 0 &&
charLen != (size_t)-1 && charLen != (size_t)-2)
{
pStr += charLen;
charCount++;
}
return (charCount);
}
int main( void )
{
size_t charCount = 0;
const char *pSample = "Every good boy does fine.";
charCount = Example(pSample);
printf("%s\nLength: %d\n", pSample, charCount);
}