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

wctomb

函数   <cstdlib>

int wctomb (char* pmb, wchar_t wc);
转换宽字符为多字节序列

转换宽字符wc为多字节序列,并存储在pmb指向的数组中。 函数返回pmb在调用后指向的等效多字节序列的字节长度。

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

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

☲  参数



pmb
指向大到足以容纳多字节序列的数组的指针。 当前语言环境中字符的多字节序列的最大长度是MB_CUR_MAX字节。
或者,该参数可以是一个空指针,在这种情况下,函数将其内部转换状态重置为初始值, 并返回多字节字符是否使用依赖于状态的编码。

wc
wchar_t类型的宽字符。

☉  返回值



如果作为pmb传递的参数不是空指针,则返回写入pmb的字符的字节大小。如果没有字符对应,则返回-1.
如果它是结束空字符,则函数返回0.
如果它们不是有效的多字节字符形式,则返回-1。

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

☣  示例



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

int main() {
  const wchar_t str[] = L"wctomb example";
  const wchar_t* pt;
  char buffer [MB_CUR_MAX];
  int i,length;

  pt = str;
  while (*pt) {
    length = wctomb(buffer,*pt);
    if (length<1) break;
    for (i=0;i<length;++i) printf ("[%c]",buffer[i]);
    ++pt;
  }

  return 0;
}


该示例使用选定的区域设置(在本例中是默认的“C”区域设置)打印宽字符串转换为的多字节字符。

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

↭  数据竞争



该函数访问pmb所指向的数组。

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

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

❆  异常(c++)



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

如果pmb既不是空指针,也不是指向长度足够容纳已翻译字符的数组的指针,则会导致未定义的行为。

🍄  另请参阅



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

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