在线文档教程
C++
字符串 | Strings

std::mbsrtowcs

STD::mbsrtwcs

Defined in header
std::size_t mbsrtowcs( wchar_t* dst, const char** src, std::size_t len, std::mbstate_t* ps

转换以空结束的多字节字符序列,该序列以*ps的第一个元素指向的数组*src它的宽字符表示。如果dst不为空,转换后的字符存储在wchar的连续元素中。[医]T数组指向dst.不超过len宽字符被写入目标数组。

每个多字节字符被转换为调用std::mbrtowc.在下列情况下停止转换:

  • 转换并存储了多字节空字符。src设置为NULL*ps表示初始移位状态。

  • 遇到根据当前C语言环境%29的无效多字节字符%28。src设置为指向第一个未转换的多字节字符的开头。

  • 要存储的下一个宽字符将超过len...src设置为指向第一个未转换的多字节字符的开头。如果没有检查此条件,则不检查此条件。dst==NULL...

参数

dst-pointer to wide character array where the results will be stored
src-pointer to pointer to the first element of a null-terminated multibyte string
len-number of wide characters available in the array pointed to by dst
ps-pointer to the conversion state object

返回值

成功后,返回宽字符数,不包括终止字符。L'\0',写入字符数组。如果dst==NULL,返回将写入给定无限长度的宽字符数。

在转换错误%28时,如果遇到无效的多字节字符%29,则返回static_cast<std::size_t>(-1)、商店EILSEQ在errno,还有树叶*ps处于未指定的状态。

注记

此函数移动src指向转换的多字节字符串结束的指针。如果dst==NULL...

二次

#include <iostream> #include <vector> #include <clocale> #include <cwchar> void print_as_wide(const char* mbstr) { std::mbstate_t state = std::mbstate_t( int len = 1 + std::mbsrtowcs(NULL, &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 = u8"z\u00df\u6c34\U0001f34c"; // or u8"zß水?" print_as_wide(mbstr }

二次

产出:

二次

Wide string: zß水? The length, including '\0': 5

二次

另见

mbrtowcconverts the next multibyte character to wide character, given state (function)
wcsrtombsconverts a wide string to narrow multibyte character string, given state (function)
do_in virtualconverts a string from externT to internT, such as when reading from file (virtual protected member function of std::codecvt)

c mbsrtwcs文档

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/string/multibit/mbsrtwcs