首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

std::mbsrtowcs

Defined in header <cwchar>

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)、商店EILSEQerrno,还有树叶*ps处于未指定的状态。

注记

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

二次

代码语言:javascript
复制
#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);
}

二次

产出:

二次

代码语言:javascript
复制
Wide string: zß水?
The length, including '\0': 5

二次

另见

mbrtowc

converts the next multibyte character to wide character, given state (function)

wcsrtombs

converts a wide string to narrow multibyte character string, given state (function)

do_in virtual

converts a string from externT to internT, such as when reading from file (virtual protected member function of std::codecvt)

c mbsrtwcs文档

代码语言:txt
复制
 © cppreference.com

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

扫码关注腾讯云开发者

领取腾讯云代金券