Namespaces
Variants

std:: mbsrtowcs

From cppreference.net
定义于头文件 <cwchar>
std:: size_t mbsrtowcs ( wchar_t * dst,

const char ** src,
std:: size_t len,

std:: mbstate_t * ps ) ;

将始于由 * 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