函数
<cstdlib>

wcstombs

size_t wcstombs (char* dest, const wchar_t* src, size_t max);
将宽字符字符串转换为多字节字符串
src 指向的序列中的宽字符翻译成多字节等效序列(存储在 dest 指向的数组中),直到翻译的字节数达到 max 或直到遇到一个转换为 *空字符* 的宽字符为止。

如果成功翻译了 max 个字节,则存储在 dest 中的结果字符串将不会以空字符终止。

结果多字节序列以初始移位状态(如果有)开始。

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

参数

dest
指向一个足够长的 char 元素数组的指针,该数组能够容纳结果序列(最多 max 字节)。
src
要翻译的 C 宽字符串。
max
要写入 dest 的字节数上限。
size_t 是一个无符号整数类型。

返回值

写入 dest 的字节数,不包括最终的空终止字符。
如果遇到一个不对应有效多字节字符的宽字符,将返回一个 (size_t)-1 的值。
请注意,size_t 是一个无符号整数类型,因此可能返回的值中没有小于零的。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/* wcstombs example */
#include <stdio.h>      /* printf */
#include <stdlib.h>     /* wcstombs, wchar_t(C) */

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

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

  ret = wcstombs ( buffer, str, sizeof(buffer) );
  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 


数据竞争

该函数访问 src 指向的数组,并修改 dest 指向的数组。
该函数还可能访问和修改一个内部状态对象,如果实现使用静态对象,这可能导致并发调用此函数时出现数据竞争(请参阅 wcsrtombs 以了解可以使用外部状态对象的替代方法)。
并发地更改 locale 设置也可能引入数据竞争。

异常 (C++)

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

如果 dest 不指向足以容纳翻译后序列的数组,或者 src 不是以空字符结尾的,或者不包含足够多的宽字符以生成 max 个多字节字符序列,则会导致 *未定义行为*。

另见