std:: mbstowcs
|
定义于头文件
<cstdlib>
|
||
|
std::
size_t
mbstowcs
(
wchar_t
*
dst,
const
char
*
src,
std::
size_t
len
)
;
|
||
将指向数组首元素的 src 所指向的多字节字符串转换为宽字符表示形式。转换后的字符将存储到 dst 所指向数组的连续元素中。最多向目标数组写入 len 个宽字符。
每个字符的转换过程如同调用 std::mbtowc 一般,但 mbtowc 的转换状态不会受到影响。转换在以下情况停止:
- 多字节空字符已被转换并存储。
- 遇到无效(在当前C语言环境中)的多字节字符。
- 待存储的下一个宽字符将超过 len 。
目录 |
注释
在大多数实现中,此函数在处理字符串时会更新类型为 std::mbstate_t 的全局静态对象,因此无法被两个线程同时调用,这种情况下应使用 std::mbsrtowcs 。
POSIX 规定了一个通用扩展:如果 dst 是空指针,该函数将返回若被转换后应写入 dst 的宽字符数量。类似的行为对于 std::mbsrtowcs 是标准功能。
参数
| dst | - | 指向存储宽字符串的宽字符数组的指针 |
| src | - | 指向要转换的以空字符结尾的多字节字符串首元素的指针 |
| len | - | dst 所指数组中可用的宽字符数量 |
返回值
成功时,返回写入目标数组的宽字符数量(不包括终止符 L ' \0 ' )。
在转换错误时(如果遇到无效的多字节字符),返回 static_cast < std:: size_t > ( - 1 ) 。
示例
#include <clocale> #include <cstdlib> #include <iostream> int main() { std::setlocale(LC_ALL, "en_US.utf8"); std::wcout.imbue(std::locale("en_US.utf8")); const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌" // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c"; wchar_t wstr[5]; std::mbstowcs(wstr, mbstr, 5); std::wcout << "wide string: " << wstr << '\n'; }
输出:
wide string: zß水🍌
参见
|
将窄多字节字符串转换为宽字符串,给定状态
(函数) |
|
|
将宽字符串转换为窄多字节字符串
(函数) |
|
|
[virtual]
|
将字符串从
ExternT
转换为
InternT
,例如从文件读取时
(
std::codecvt<InternT,ExternT,StateT>
的虚受保护成员函数)
|
|
C 文档
for
mbstowcs
|
|