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

std::wcstombs

Материал из cppreference.com
< cpp‎ | string‎ | multibyte
 
 
 
Многобайтовые строки с завершающим нулём
Широкие/многобайтовые преобразования
wcstombs
(C++20)
(C++11)
(C++11)
Типы
 
Определено в заголовочном файле <cstdlib>
std::size_t wcstombs( char* dst, const wchar_t* src, std::size_t len);

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

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

  • Нулевой символ был преобразован и сохранён.
  • Обнаружен wchar_t, который не соответствует допустимому символу в текущей локали C.
  • Следующий сохраняемый многобайтовый символ превысит len.

Содержание

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

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

POSIX определяет общее расширение: если dst является нулевым указателем, эта функция возвращает количество байтов, которые будут записаны в dst при преобразовании. Аналогичное поведение является стандартным для std::wcsrtombs.

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

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

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

В случае успеха возвращает количество байтов (включая любые последовательности сдвига, но исключая завершающий '\0'), записанных в массив символов, на первый элемент которого указывает dst.

При ошибке преобразования (если обнаружен недопустимый широкий символ) возвращает static_cast<std::size_t>(-1).

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

#include <iostream>
#include <clocale>
#include <cstdlib>
 
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // Узкая многобайтовая кодировка UTF-8
    const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // или L"zß水𝄋"
    char mbstr[11];
    std::wcstombs(mbstr, wstr, 11);
    std::cout << "многобайтовая строка: " << mbstr << '\n';
}

Вывод:

многобайтовая строка: zß水𝄋

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

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

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