函数
<cwchar>

wcsrtombs

size_t wcsrtombs (char* dest, const wchar_t** src, size_t max, mbstate_t* ps);
将宽字符字符串转换为多字节字符串
该函数将由src指向的C宽字符串中最多max个字符转换为它们的多字节序列等效项,并将它们存储在dest指向的缓冲区中,如果遇到终止的空宽字符,则停止(它也会被转换并存储,但其长度不计入函数返回的长度)。

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

如果函数转换了整个C宽字符串(直到遇到空宽字符),并且dest不是空指针,则函数会将src设置为空指针值,并且转换后的状态保证为初始转换状态。

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

这是wcstombs<cstdlib>)的*可重入*版本。

参数

dest
指向一个char足够长的元素,可以存储最多max个字节的C字符串。
如果这是一个空指针,函数不会存储结果序列,但仍会计算存储src转换所需的字节数(在这种情况下,参数max将被忽略)。
src
指向要转换的C宽字符串的指针(一个间接指针)。
如果转换提前停止,此值将被函数修改,指向最后一个被转换的宽字符之后;如果函数到达终止的空字符,则指向空指针。
max
写入dest的最大字节数。
size_t 是一个无符号整数类型。
ps
指向一个定义转换状态的 mbstate_t 对象的指针。

返回值

写入dest的字节数(不包括最终的终止空字符)。

如果在转换过程中,函数遇到一个没有有效多字节序列等效项的宽字符,函数会将errno设置为EILSEQ并返回(size_t)-1src将指向第一个无法转换的字符。

请注意,size_t 是一个无符号整型类型,因此可能返回的值中没有一个是小于零的。

示例

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

int main() {
  const wchar_t str[] = L"wcstombs example";
  const wchar_t * p;
  mbstate_t mbs;
  char buffer[32];
  int ret;

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

  printf ("wchar_t string: %ls \n",str);

  p = str;
  ret = wcsrtombs ( buffer, &p, sizeof(buffer), &mbs );
  if (ret==32) buffer[31]='\0';
  if (ret) printf ("multibyte string: %s \n",buffer);

  return 0;
}

输出

wchar_t string: wcstombs example 
multibyte string:  wcstombs example 


另见