mbrlen
函数 <cwchar>
size_t mbrlen (const char* pmb, size_t max, mbstate_t* ps);
获取多字节字符的宽度
返回pmb所指向的多字节字符的宽度(每个多字节字符包含的字节数).
需要查找最多为Max个字节。
该函数使用(并更新)由ps描述的转换状态。如果ps是一个空指针,
则该函数使用自己的内部转换状态,只有调用该函数才会在必要时改变该状态。
用空指针调用pmb函数将重置转换状态(并忽略参数max)。
这个函数的行为取决于所选
C语言环境的LC_CTYPE类型。
这是
mblen
(<
cstdlib >)的 restartable 版本。
☲ 参数
pmb
指向多字节字符的第一个字节的指针。
或者,可以使用空指针调用函数,在这种情况下,
函数将转换状态(ps或它自己的内部状态)重置为初始状态并返回0。
max
需要查找的多字节字符的最大字节数。
宏常量
MB_CUR_MAX定义了在当前区域设置下可以形成多字节字符的最大字符宽度(每个多字节字符包含的字节数)。
size_t是一个无符号整型。
ps
字节的int形式(例如在多字节序列中)。
该值将在内部转换为unsigned char类型以进行解释。
☉ 返回值
如果pmb指向空字符,或者pmb是空指针,函数返回0。
如果,如果pmb指向的字符长度可以形成有效的多字节字符,则函数返回该多字节字符的宽度。
如果,如果max不能构成有效的多字节字符,则函数返回(size_t)-1并将
errno设置为EILSEQ。
如果,如果max导致一个不完整(但可能有效)的多字节字符,则函数返回(size_t)-2。
注意,
size_t是一个无符号整型,因此返回的值可能都不小于零。
☣ 示例
/* mbrlen example */
#include <stdio.h>
#include <string.h>
#include <wchar.h>
void splitmb (const char* pt, size_t max)
{
size_t length;
wchar_t dest;
mbstate_t mbs;
int i;
mbrlen (NULL,0,&mbs); /* initialize state */
while (max>0) {
length = mbrlen (pt, max, &mbs);
if ((length==0)||(length>max)) break;
putchar ('[');
for (i=0; i<length; ++i) putchar (*pt++);
putchar (']');
max-=length;
}
}
int main()
{
const char str [] = "test string";
splitmb (str,sizeof(str));
return 0;
}
|
函数splitmb将多字节序列分割为组成每个字符的字节组。
该示例使用了“C”区域设置中一个简单的字符串,但是该函数支持多字节字符串的区域设置。
输出:
[t][e][s][t][ ][s][t][r][i][n][g]
|
🍄 另请参阅