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> )