函数
<cwchar>

mbsrtowcs

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

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

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

如果函数转换了整个多字节字符串(直到找到空字符),并且 dest 不是空指针,则函数将 src 设置为空指针值,并保证结果状态为初始转换状态。

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

这是 mbstowcs (<cstdlib>) 的可重入版本。

参数

dest
指向一个wchar_t数组的指针,该数组足够长,可以存储一个包含 max 个宽字符的字符串。
如果这是一个空指针,函数不会存储结果字符串,但仍会计算 src 中有多少字节构成一个有效的字符串(在这种情况下,max 参数被忽略)。
src
指向待解释的 C 多字节字符串的指针(一个间接指针)。
如果转换提前停止,函数会修改此值,使其指向最后一个被转换的多字节字符之后的位置;如果函数到达了终止空字符,则此值会被修改为 null 指针。
max
要写入 dest 的最大宽字符数。
size_t 是一个无符号整数类型。
ps
指向一个定义转换状态的 mbstate_t 对象的指针。

返回值

写入到 dest 的宽字符数(不包括可能有的终止空字符)。

如果在转换过程中,函数遇到了一个不能构成有效多字节字符的字节序列,函数会设置 errnoEILSEQ并返回(size_t)-1src 将指向第一个无法转换的字节。

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

另见