函数
<cstdlib>

mbstowcs

size_t mbstowcs (wchar_t* dest, const char* src, size_t max);
将多字节字符串转换为宽字符字符串
src 指向的多字节字符序列转换为等效的宽字符序列(存储在 dest 指向的数组中),直到转换了 max 个宽字符,或者直到遇到多字节字符序列 src 中的空字符(该空字符也会被转换并存储,但在函数返回的长度中不计)。

如果成功转换了 max 个字符,则存储在 dest 中的结果字符串将不以空字符结尾。

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

参数

dest
指向一个足够大的 wchar_t 元素数组的指针,该数组可以容纳结果序列(最多 max 个宽字符)。
src
包含要解释的多字节字符的 C 字符串。
多字节字符序列应以初始移位状态开始。
max
要写入 destwchar_t 字符的最大数量。
size_t 是一个无符号整数类型。

返回值

写入 dest 的宽字符数量,不包括最终的*终止空字符*。
如果遇到无效的多字节字符,则返回 (size_t)-1
请注意,size_t 是无符号整数类型,因此返回的任何值都不会小于零。

数据竞争

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

异常 (C++)

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

如果 dest 指向的数组不足以容纳转换后的序列,或者 src 不是以空字符结尾或不包含足够的字节来生成 max 个宽字符(或者它没有以初始移位状态开始),则会导致*未定义行为*。

另见