std::wcstombs
Определено в заголовочном файле <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 функция-элемент)
|
Документация C по wcstombs
|