Home C&C++函数库 c++ 语法 程序源码 Linux C库

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]


🍄  另请参阅



wcrtomb 将宽字符转换为多字节序列(function )
mbrtowc 转换多字节序列为宽字符(function )
mbsrtowcs 转换多字节字符串到宽字符字符串(function )
wcsrtombs 转换宽字符字符串为多字节字符串(function )

联系我们 免责声明 关于CandCplus 网站地图