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 не является нулевым указателем, преобразованные символы сохраняются в последовательных элементах массива 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

Смотрите также

преобразует следующий многобайтовый символ в широкий символ с учётом состояния
(функция)
преобразует широкую строку в узкую многобайтовую строку с учётом состояния
(функция)
[virtual]
преобразует строку из ExternT в InternT , например, при чтении из файла
(виртуальная защищённая функция-член std::codecvt<InternT,ExternT,StateT> )