mbsrtowcs

转换多字节字符字符串转换为相应的宽字符字符串。此功能的一种较为安全的版本可用; mbsrtowcs参见。

size_t mbsrtowcs(
   wchar_t *wcstr,
   const char **mbstr,
   sizeof count,
   mbstate_t *mbstate
);
template <size_t size>
size_t mbsrtowcs(
   wchar_t (&wcstr)[size],
   const char **mbstr,
   sizeof count,
   mbstate_t *mbstate
); // C++ only

参数

  • [out] wcstr
    生成的已转换的宽字符字符串的地址位置。

  • [in] mbstr
    间接指向要转换的多字节字符字符串的位置。

  • [in] count
    将转换的字符数。

  • [in] mbstate
    为 mbstate_t 转换状态对象的指针。

返回值

返回成功转换的单词的数字,不包括终止 null 字符串 (如果有),否则 a-1 为 null,如果错误。

备注

mbsrtowcs 函数多字节字符字符串开始,在 mbstate包含的指定转换状态,在 mbstr点的转换值取消,为 wcstr地址。转换为每个字符将继续直到:在 null 终止的多字节字符遇到后,那么,当非对应的字符遇到或,如下字符将以上 count包含的限制。如果 mbsrtowcs 遇到多字节 null 字符 (“\ 0 ") 或前面,或者 count 发生,它会将其转换为 16 位的 null 终止字符和停止。

因此,在转换过程中,,因此,只有当 mbsrtowcs 遇到多字节 null 字符在 wcstr 的宽字符字符串 null 结尾。如果顺序指向由 mbstr 和 wcstr 重叠, mbsrtowcs 行为不确定。mbsrtowcs 受当前区域设置的 LC_TYPE 类别的影响。

mbsrtowcs 功能与 mbstowcs, _mbstowcs_l 不同由其 restartability。转换状态中的 mbstate 存储的后续调用相同或其他可重新启动的功能。,混合使用可重新启动和 nonrestartable 函数时,结果是未定义的。例如,因此,如果以后对 mbsrtowcs 效果位置而不是 mbstowcs.,应用程序将使用 mbsrlen 而不是 mbslen

如果 wcstr 参数是 NULL, mbsrtombs 返回在目标字符串中运行所需的大小。如果 mbstate 为空,使用内部 mbstate_t 转换状态。如果字符序列 wchar 没有相应的多字节字符表示形式, a-1 返回,并且 errno 设置为 EILSEQ。

如果 mbstr 是 NULL,无效参数调用处理程序,如 参数验证所述。如果执行允许继续,此功能设置 errno 到 EINVAL 并返回 -1。

在 C++ 中,该函数具有调用的模板重载越+新,保证此功能副本。有关更多信息,请参见 安全模板重载

异常

mbsrtowcs 功能是多线程安全性,只要在当前线程的函数不调用 setlocale ,则此函数执行时,并 mbstate 不为 null。

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例

要求

实例

必需的头

mbsrtowcs

wchar.h

请参见

参考

数据转换

区域设置

多字节字符序列的说明

mbrtowc

mbtowc, _mbtowc_l

mbstowcs, _mbstowcs_l

mbsinit