std::mbsrtowcs
Определён в заголовочном файле <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устанавливается в нулевой указатель, а*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
См. также
| преобразует следующий многобайтовый символ в широкий символ с учётом состояния (функция) |
|
| преобразует широкую строку в узкую многобайтовую строку с учётом состояния (функция) |
|
|
[виртуальная] | преобразует строку из ExternT в InternT, например при чтении из файла (виртуальная защищённая функция-член std::codecvt<InternT,ExternT,StateT>) |
Документация по C для mbsrtowcs |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/multibyte/mbsrtowcs