Namespaces
Variants

std:: mbstowcs

From cppreference.net
定义于头文件 <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