mblen
函数 <cstdlib>
int mblen (const char* pmb, size_t max);
获取多字节字符的宽度
返回pmb所指向的多字节字符的宽度(每个多字节字符包含的字节数)。
需要查找最多为Max个字节。
mblen有自己的内部转换状态,只有通过调用此函数才能根据需要进行更改。
当pmb重置状态时,使用空指针调用函数(并返回多字节字符是否依赖于状态)。
这个函数的行为取决于所选
C语言环境的LC_CTYPE类别。
☲ 参数
pmb
指向多字节字符的第一个字节的指针。
或者,可以使用空指针调用函数,在这种情况下,函数将其内部转换状态重置为初始值,
并返回多字节字符是否使用依赖于状态的编码。
max
要查找的多字节字符pmb的最大字节数.
在任何情况下,检查的字符都不超过
MB_CUR_MAX。
Size_t是一个无符号整型。
☉ 返回值
如果pmb传递的参数不是空指针,当pmb指向的字符是一个有效的多字节字符而不是结束空字符时,
将返回该字符的字节大小。
如果它是结束空字符,则函数返回0.
如果它们不是有效的多字节字符形式,则返回-1。
如果作为pmb传递的参数是空指针,则:如果多字节字符编码与状态相关,则函数返回一个非零值,否则返回零值。
☣ 示例
/* mblen example */
#include <stdio.h> /* printf */
#include <stdlib.h> /* mblen, mbtowc, wchar_t(C) */
void printbuffer (const char* pt, size_t max)
{
int length;
wchar_t dest;
mblen (NULL, 0); /* reset mblen */
mbtowc (NULL, NULL, 0); /* reset mbtowc */
while (max>0) {
length = mblen (pt, max);
if (length<1) break;
mbtowc(&dest,pt,length);
printf ("[%lc]",dest);
pt+=length; max-=length;
}
}
int main()
{
const char str [] = "test string";
printbuffer (str,sizeof(str));
return 0;
}
|
Printbuffer一个字符一个字符地打印一个多字节字符串。
该示例使用了一个使用“C”区域设置的普通字符串,但是该函数支持解释多字节字符串的区域设置。
输出:
[t][e][s][t][ ][s][t][r][i][n][g]
↭ 数据竞争
该函数访问pmb所指向的数组。
该函数还访问和修改一个内部状态对象,这可能会导致对该函数的并发调用发生数据竞争
(参见
mbrlen获得可能使用外部状态对象的替代方法)。
同时更改区域设置也可能会引入数据竞争。
❆ 异常(c++)
无抛出保证:这个函数不抛出异常。
如果pmb既不是空指针,也不是指向足够长的数组(如上所述)的指针,它将导致未定义的行为。
🍄 另请参阅