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ß水🍌
См. также
| преобразует строку узких многобайтовых символов в широкую строку с учётом состояния (функция) |
|
| преобразует широкую строку в строку узких многобайтовых символов (функция) |
|
|
[виртуальная] | преобразует строку из 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