Пространства имён
Варианты
Действия

std::mbstowcs

Материал из cppreference.com
< cpp‎ | string‎ | multibyte
 
 
 
Многобайтовые строки с завершающим нулём
Широкие/многобайтовые преобразования
mbstowcs
(C++20)
(C++11)
(C++11)    
Типы
 
Определено в заголовочном файле <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 <iostream>
#include <clocale>
#include <cstdlib>
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    std::wcout.imbue(std::locale("en_US.utf8"));
    const char* mbstr = "z\u00df\u6c34\U0001f34c"; // или u8"zß水🍌"
                        // или "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
    wchar_t wstr[5];
    std::mbstowcs(wstr, mbstr, 5);
    std::wcout << "широкая строка: " << wstr << '\n';
}

Вывод:

широкая строка: zß水🍌

[править] Смотрите также

преобразует узкую многобайтовую строку символов в широкую строку при заданном состоянии
(функция) [править]
преобразует широкую строку в узкую многобайтовую строку символов
(функция) [править]
[virtual]
преобразует строку из externT в internT, например, при чтении из файла
Оригинал:
converts a string from externT to internT, such as when reading from file
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(virtual protected std::codecvt функция-элемент) [править]