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
| |