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

mbtowc

函数   <cstdlib>

int mbtowc (wchar_t* pwc, const char* pmb, size_t max);
转换多字节序列为宽字符

pmb指向的多字节字符被转换为类型为wchar_t的值,并存储在pwc指向的位置。函数返回多字节字符的字节宽度。

mbtowc有自己的内部转换状态,必要时只通过调用这个函数来改变它。 使用空指针作为pmb调用该函数将重置状态(并返回多字节字符是否依赖于状态)。

这个函数的行为取决于所选C语言环境的LC_CTYPE类别。

☲  参数



pwc
指向wchar_t类型对象的指针。
或者,这个参数可以是一个空指针,在这种情况下,函数不存储wchar_t转换,但仍然返回多字节字符的字节宽度。

pmb
指向多字节字符的第一个字节的指针。
或者,该参数可以是一个空指针,在这种情况下,函数将其内部转换状态重置为初始值, 并返回多字节字符是否具有依赖于状态的编码。

max
需要查找的多字节字符的最大字节数。
在任何情况下,检查的字符都不超过MB_CUR_MAX
Size_t是一个无符号整型。

☉  返回值



如果作为pmb传递的参数不是空指针,当pmb指向的字符是一个有效的多字节字符而不是结束空字符时, 将返回该字符的宽度。
如果它是结束空字符,则函数返回0.
如果它们不是有效的多字节字符形式,则返回-1。

如果作为pmb传递的参数是空指针,则:如果多字节字符编码与状态相关, 则函数返回一个非零值,否则返回零值。

☣  示例



/* mbtowc example */
#include <stdio.h>      /* printf */
#include <stdlib.h>     /* mbtowc, wchar_t(C) */

void printbuffer (const char* pt, size_t max)
{
  int length;
  wchar_t dest;

  mbtowc (NULL, NULL, 0);  /* reset mbtowc */

  while (max>0) {
    length = mbtowc(&dest,pt,max);
    if (length<1) break;
    printf ("[%lc]",dest);
    pt+=length; max-=length;
  }
}

int main()
{
  const char str [] = "mbtowc example";

  printbuffer (str,sizeof(str));

  return 0;
}


Printbuffer一个字符一个字符地打印一个多字节字符串。

该示例使用了一个使用“C”区域设置的普通字符串,但是该函数支持解释多字节字符串的区域设置。

输出:
[m][b][t][o][w][c][ ][e][x][a][m][p][l][e]

↭  数据竞争



该函数访问pmb所指向的数组,并修改pwc所指向的对象(如果不是null)。

该函数还访问和修改一个内部状态对象,这可能会导致对该函数的并发调用发生数据竞争 (参见mbrtowc获取可能使用外部状态对象的替代方法)。

同时更改区域设置也可能会引入数据竞争。

❆  异常(c++)



无抛出保证:这个函数不抛出异常。

如果pwc既不是空指针,也不是指向有效对象的指针,或者pmb既不是空指针, 也不是指向足够长的数组的指针(如上所述),则会导致未定义的行为。

🍄  另请参阅



mblen 获取多字节字符的长度(function)
mbstowcs 转换多字节字符串为宽字符字符串(function)
wcstombs 转换宽字符字符串为多字节字符串(function)
wctomb 转换宽字符为多字节序列(function)

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