Spec-Zone.ru › C++

std::mbstowcs

Определено в заголовочном файле <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ß水🍌

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/string/multibyte/mbstowcs

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API