wcsrtombs 或 wcsnrtombs 子例程

用途

将一个宽字符字符串转换为一个字符串 (可重新启动)。

标准库 (libc.a)

语法

#include <wchar.h>
size_t wcsrtombs (char * dst, const wchar_t ** src, size_t len, mbstate_t * ps);
size_t wcsnrtombs (char * dst, const wchar_t ** src, size_t nwc, size_t len, mbstate_t * ps);

描述

韦奇托姆布斯 函数将 间接指向的数组中的宽字符序列转换为相应字符的序列,从 ps所指向的对象所描述的转换状态开始。如果 德斯特 不是空指针,那么会将转换后的字符存储到 德斯特指向的数组中。 将继续转换为并包含终止空的宽字符,该字符也会存储。 在以下情况下,转换会提前停止:

  • 当到达的代码与有效字符不对应时。
  • 下一个字符将超过 德斯特 所指向的数组中存储的 总字节数的限制 (并且 德斯特 不是空指针)。

每次转换都像通过调用 弗罗图马 函数一样进行。

如果 德斯特 不是空指针,那么将为 所指向的指针对象分配空指针 (如果由于到达一个终止的空宽字符而停止转换) 或刚刚经过最后一个转换的宽字符 (如果有) 的地址。 如果由于到达终止空宽字符而停止转换,那么所描述的结果状态是初始转换状态。

如果 ps 是空指针,那么 韦奇托姆布斯 函数将使用它自己的内部 mbstate_t 对象,该对象在程序启动时初始化为初始转换状态。 否则,将使用 ps 所指向的 mbstate_t 对象来完全描述关联的字符序列的当前转换状态。 实现将像在此规范中未定义任何函数一样调用 韦奇托姆布斯

温尔托姆布斯 函数与 韦奇托姆布斯 函数等效,但转换限制为前 全国 个宽字符。

此函数的行为受到当前语言环境的 LC_CTYPE 类别的影响。

返回值

如果由于到达的代码与有效字符不对应而导致转换停止,那么会发生编码错误。 在此情况下, 韦奇托姆布斯温尔托姆布斯 函数会将宏 EILSEQ 的值存储在 错误号 中并返回 (size_t) -1; 转换状态未定义。 否则, 韦奇托姆布斯温尔托姆布斯 函数将返回生成的字符序列中的字节数,不包括终止空值 (如果有)。

错误代码

在以下情况下, 韦奇托姆布斯 函数可能会失败:

描述
EINVAL ps 指向包含了无效转换状态的对象。
EILSEQ 宽字符代码与有效的字符不对应。