Namespaces
Variants

std:: wcstombs

From cppreference.net
Определено в заголовочном файле <cstdlib>
std:: size_t wcstombs ( char * dst, const wchar_t * src, std:: size_t len ) ;

Преобразует последовательность широких символов из массива, первый элемент которого указывается src , в её узкое многобайтовое представление, начинающееся в начальном состоянии сдвига. Преобразованные символы сохраняются в последовательных элементах массива char, на который указывает 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 <clocale>
#include <cstdlib>
#include <iostream>
int main()
{
    std::setlocale(LC_ALL, "en_US.utf8");
    // UTF-8 narrow multibyte encoding
    const wchar_t* wstr = L"z\u00df\u6c34\U0001d10b"; // or L"zß水𝄋"
    char mbstr[11];
    std::wcstombs(mbstr, wstr, 11);
    std::cout << "multibyte string: " << mbstr << '\n';
}

Вывод:

multibyte string: zß水𝄋

Смотрите также

преобразует широкую строку в узкую многобайтовую строку символов с учетом состояния
(функция)
преобразует узкую многобайтовую строку символов в широкую строку
(функция)
[virtual]
преобразует строку из InternT в ExternT , например при записи в файл
(виртуальная защищенная функция-член std::codecvt<InternT,ExternT,StateT> )