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

std::mbstowcs

Материал из cppreference.com
< cpp‎ | string‎ | multibyte
Defined in header <cstdlib>
std::size_t mbstowcs( wchar_t* dst, const char* src, std::size_t len);

Преобразовывает строку из мультибайтовых символов в массив, чей первый элемент, на который указывает src, будет хранить эту строку из широких символов. Преобразованные символы сохраняются в последовательных элементах массива, на который указывает dst. Не больше чем len широких символов может быть записано в массив назначения.

Каждый символ конвертируется так, как если бы вызывалась функция std::mbtowc, только с той разницей, что состояние сдвига регистра mbtowc не изменяется. Процесс преобразования заканчивается, если:

  • Мультибайтовый нулевой символ был сконвертирован и сохранён
  • Некорректный (в текущей Си-локали) мультибайтовый символ встретился
  • Сохранение следующего широкого символа может превысить len.

Содержание

[править] Примечание

В большинстве реализаций эта функция обновляет глобальный статический объект, который имеет тип std::mbstate_t, в ходе обработки строки, и она не может быть вызвана одновременно из двух потоков, если это необходимо, то можно воспользоваться std::mbsrtowcs.

Специфичная для POSIX расширение: если dst - нулевой указатель, то эта функция возвращает количество широких символов, которое может быть записано в dst, если они будут сконвертированы. Подобное поведение характерно и для std::mbsrtowcs.

[править] Параметры

dst Указатель на строку из широких символов, куда будет сохранена сконвертированная строка
src Указатель на нульзавершённую строку из мультибайтовых символов для конвертирования
len Количество доступных для сохранения широких символов для сохранения

[править] Возвращаемое значение

В случае успеха возвращается количество широких символов, исключая завершающий L'\0', которые были записаны в массив назначения.

Если процесс конвертирования был не удачен (встречен некорректный мультибайтовый символ), то возвращается -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 = u8"z\u00df\u6c34\U0001f34c"; // Или u8"zß水🍌"
                        // or "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9f\x8d\x8c";
    wchar_t wstr[5];
    std::mbstowcs(wstr, mbstr, 5);
    std::wcout << L"Строка из широких символов: " << wstr << '\n';
}

Вывод:

Строка из широких символов: zß水🍌

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

преобразует узкой буквенная многобайтовых широкой строки, данное состояние
Оригинал:
converts a narrow multibyte character string to wide string, given state
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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

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