std:: mbsrtowcs
|
定义于头文件
<cwchar>
|
||
|
std::
size_t
mbsrtowcs
(
wchar_t
*
dst,
const
char
**
src,
|
||
将始于由 * ps 描述的转换状态、以 * src 指向的首元素的数组中的空终止多字节字符序列,转换为其宽字符表示形式。若 dst 非空,则转换后的字符将被存储到 dst 所指向的wchar_t数组的连续元素中。最多向目标数组写入 len 个宽字符。
每个多字节字符的转换过程如同调用 std::mbrtowc 。在以下情况下转换将终止:
-
多字节空字符已被转换并存储。
src
被设为空指针,且
*ps表示初始移位状态。 - 遇到无效的多字节字符(根据当前C语言环境)。 src 被设置为指向第一个未转换多字节字符的起始位置。
- 待存储的下一个宽字符将超过 len 。 src 被设置为指向第一个未转换多字节字符的起始位置。若 dst 为空指针则不检查此条件。
目录 |
参数
| dst | - | 指向存储结果的宽字符数组的指针 |
| src | - | 指向以空字符结尾的多字节字符串首元素的指针的指针 |
| len | - | dst 所指数组中可用的宽字符数量 |
| ps | - | 指向转换状态对象的指针 |
返回值
成功时,返回写入字符数组的宽字符数量(不包含终止符 L ' \0 ' )。若 dst 是空指针,则返回在长度不受限情况下本应写入的宽字符数量。
在转换错误时(如果遇到无效的多字节字符),返回 static_cast < std:: size_t > ( - 1 ) ,将 EILSEQ 存入 errno ,并使 * ps 处于未指定状态。
注释
此函数将 src 指针移动到转换后的多字节字符串末尾。若 dst 为空指针则不会发生此操作。
示例
#include <clocale> #include <cwchar> #include <iostream> #include <vector> void print_as_wide(const char* mbstr) { std::mbstate_t state = std::mbstate_t(); std::size_t len = 1 + std::mbsrtowcs(nullptr, &mbstr, 0, &state); std::vector<wchar_t> wstr(len); std::mbsrtowcs(&wstr[0], &mbstr, wstr.size(), &state); std::wcout << "Wide string: " << &wstr[0] << '\n' << "The length, including '\\0': " << wstr.size() << '\n'; } int main() { std::setlocale(LC_ALL, "en_US.utf8"); const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌" print_as_wide(mbstr); }
输出:
Wide string: zß水🍌 The length, including '\0': 5
参见
|
在给定状态下将下一个多字节字符转换为宽字符
(函数) |
|
|
在给定状态下将宽字符串转换为窄多字节字符串
(函数) |
|
|
[virtual]
|
将字符串从
ExternT
转换为
InternT
,例如从文件读取时
(
std::codecvt<InternT,ExternT,StateT>
的虚受保护成员函数)
|
|
C 文档
for
mbsrtowcs
|
|