函数
<cwchar>

mbrlen

size_t mbrlen (const char* pmb, size_t max, mbstate_t* ps);
获取多字节字符的长度
返回由pmb指向的多字节字符的大小,最多检查max个字节。

该函数使用(并更新)由 ps 描述的转换状态。如果 ps 是一个空指针,该函数使用其自己的内部转换状态,该状态仅在调用此函数时根据需要进行更改。

pmb为null指针时调用该函数会重置移位状态(并忽略参数max)。

此函数的行为取决于所选LC_CTYPEC locale 的类别。

这是mblen<cstdlib>)的可重入版本。

参数

pmb
指向多字节字符第一个字节的指针。
或者,可以使用空指针调用该函数,在这种情况下,函数将转换状态(ps 或其内部状态)重置为初始状态并返回零。
max
要检查的最大字节数。
宏常量 MB_CUR_MAX 定义了在当前区域设置下,一个多字节字符可以包含的最大字节数。
size_t 是一个无符号整数类型。
ps
指向一个定义转换状态的 mbstate_t 对象的指针。

返回值

如果pmb指向空字符,或者pmb是空指针,则函数返回零。

否则,如果pmb指向的最多max个字符组成一个有效多字节字符,则函数返回该多字节字符的大小(以字节为单位)。

否则,如果最多max个字符不能组成一个有效多字节字符,则函数返回(size_t)-1并设置 errnoEILSEQ.

否则,如果max个字符组成一个不完整的(但可能是有效的)多字节字符,则函数返回(size_t)-2.

请注意,size_t 是一个无符号整型类型,因此可能返回的值中没有一个是小于零的。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* 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]


另见