函数
<cwchar>

wcrtomb

size_t wcrtomb (char* pmb, wchar_t wc, mbstate_t* ps);
将宽字符转换成多字节序列
宽字符 wc 被翻译成其等效的多字节字符,并存储在由 pmb 指向的数组中。该函数返回由 pmb 指向的等效多字节序列的字节长度。

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

如果 wc 是一个空宽字符,该函数会重置移位状态,并存储一个空字节,前面加上任何恢复初始移位状态所需的移位序列。

使用空指针作为 pmb 来调用该函数也会重置移位状态(并忽略参数 wc)。

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

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

参数

pmb
指向一个足以容纳多字节序列的数组的指针。
在当前 locale 中,一个字符的多字节序列的最大长度是 MB_CUR_MAX 字节。

或者,该函数可以用一个空指针来调用,在这种情况下,函数总是将移位状态重置为初始状态,就像 wcL'\0' 一样(忽略作为 wc 传入的实际值)。
wc
类型为wchar_t.
ps
指向一个定义转换状态的 mbstate_t 对象的指针。

如果这是一个空指针,该函数会使用其自己的内部移位状态,该状态在程序启动时初始化,并且仅通过对此函数的调用来改变。

返回值

pmb 处写入的多字节序列的大小(以字节为单位),包括任何移位字符。

如果没有字符对应关系,函数返回(size_t)-1并设置 errnoEILSEQ.

如果 pmb 是一个空指针,函数返回一加上恢复初始移位状态所需的字节数(就好像函数在内部缓冲区上操作,且 wcL'\0')。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* wcrtomb example */
#include <wchar.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
  const wchar_t* pt = L"wcrtomb example";
  char buffer [MB_CUR_MAX];
  size_t length, i;
  mbstate_t mbs;

  mbrlen (NULL,0,&mbs);   /* initialize mbs */

  while (*pt) {
    length = wcrtomb(buffer,*pt,&mbs);
    if ((length==0)||(length>MB_CUR_MAX)) break;
    putchar ('[');
    for (i=0;i<length;++i) putchar (buffer[i]);
    putchar (']');
    ++pt;
  }

  return 0;
}

该示例打印了一个宽字符字符串在使用所选 locale (在本例中是"C"locale) 转换成的多字节字符。

输出

[w][c][r][t][o][m][b][ ][e][x][a][m][p][l][e]


另见