函数
<cstdlib>

wctomb

int wctomb (char* pmb, wchar_t wc);
将宽字符转换成多字节序列
宽字符 wc 被翻译为其等效的多字节字符,并存储在 pmb 指向的数组中。函数返回调用后 pmb 所指向的等效多字节序列的字节长度。

wctomb 拥有其自己的内部转换状态,该状态仅在必要时由对该函数的调用来改变。以空指针作为 pmb 调用该函数会重置该状态(并返回多字节序列是否是状态相关的)。

此函数的行为取决于所选 C localeLC_CTYPE 类别。

参数

pmb
指向一个足以容纳多字节序列的数组的指针。
在当前区域设置中,一个字符的多字节序列的最大长度是 MB_CUR_MAX 字节。
或者,该函数也可以用空指针调用,在这种情况下,函数会将其内部转换状态重置为初始值,并返回多字节序列是否使用状态相关的编码。
wc
wchar_t 类型的宽字符。

返回值

如果作为 pmb 传递的参数不是空指针,则返回写入到 pmb 的字符的字节大小。如果没有对应的字符,则返回 -1

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

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* 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,这是一个可以使用外部状态对象的替代方案)。
并发地更改 locale 设置也可能引入数据竞争。

异常 (C++)

无抛出保证:此函数不会抛出异常。

如果 pmb 既不是空指针,也不是指向一个足够长的数组以容纳转换后字符的指针,它将导致未定义行为

另见