C++官网参考链接:https://cplusplus.com/reference/cwchar/mbrlen/
函数
<cwchar>
mbrlen
size_t mbrlen (const char* pmb, size_t max, mbstate_t* ps);
获取多字节字符的长度
返回pmb所指向的多字节字符的大小,最多检查max字节数。
该函数使用(并更新)由ps描述的移位状态。如果ps是空指针,则该函数使用自己的内部移位状态,只有在必要时调用该函数才能更改该状态。
使用空指针作为pmb调用函数将重置移位状态(并忽略形参max)。
此函数的行为取决于所选C区域设置(C locale)的LC_CTYPE类别。
这是mblen(<cstdlib>)的可重新启动版本。
形参
pmb
指向多字节字符的第一个字节的指针。
或者,可以用空指针调用函数,在这种情况下,函数会将移位状态(ps或它自己的内部状态)重置为初始状态并返回零。
max
要检查的最大字节数。
宏常量MB_CUR_MAX定义了在当前区域设置下可以形成多字节字符的最大字节数。
size_t是无符号整型。
ps
指向定义转换状态的mbstate_t对象的指针。
返回值
如果pmb指向空字符,或者pmb是空指针,则函数返回零。
否则,如果pmb指向的最多max个字符构成有效的多字节字符,则函数返回该多字节字符的字节大小。
否则,如果最多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"区域设置中使用一个普通字符串,但该函数支持支持多字节字符串的区域设置。
输出:
另请参考
mbrtowc Convert multibyte sequence to wide character (function)
wcrtomb Convert wide character to multibyte sequence (function)
mbsrtowcs Convert multibyte string to wide-character string (function)
wcsrtombs Convert wide-character string to multibyte string (function)