std:: wcsrtombs
|
Определено в заголовочном файле
<cwchar>
|
||
|
std::
size_t
wcsrtombs
(
char
*
dst,
const
wchar_t
**
src,
|
||
Преобразует последовательность широких символов из массива, на первый элемент которого указывает * src , в её узкое многобайтовое представление, начиная с состояния преобразования, описанного в * ps . Если dst не является нулевым указателем, преобразованные символы сохраняются в последовательных элементах массива char, на который указывает dst . Не более чем len байт записывается в целевой массив.
Каждый символ преобразуется как при вызове std::wcrtomb . Преобразование останавливается, если:
- Нулевой символ был преобразован и сохранён. src устанавливается в нулевой указатель, а * ps представляет начальное состояние сдвига.
- Обнаружен wchar_t , который не соответствует допустимому символу в текущей локали C. src устанавливается на первый непреобразованный широкий символ.
- Следующий многобайтовый символ для сохранения превысил бы len . src устанавливается на первый непреобразованный широкий символ. Это условие не проверяется, если dst является нулевым указателем.
Содержание |
Параметры
| dst | - | указатель на массив узких символов, где будут храниться многобайтовые символы |
| src | - | указатель на указатель на первый элемент широкой строки с нулевым завершением |
| len | - | количество байт, доступных в массиве, на который указывает dst |
| ps | - | указатель на объект состояния преобразования |
Возвращаемое значение
При успехе возвращает количество байт (включая любые сдвиговые последовательности, но исключая завершающий ' \0 ' ), записанных в массив символов, на первый элемент которого указывает dst . Если dst является нулевым указателем, возвращает количество байт, которое было бы записано (снова исключая завершающий нулевой символ ' \0 ' ).
При ошибке преобразования (если встречен недопустимый широкий символ), возвращает static_cast < std:: size_t > ( - 1 ) , сохраняет EILSEQ в errno и оставляет * ps в неопределённом состоянии.
Пример
#include <clocale> #include <cwchar> #include <iostream> #include <string> #include <vector> void print_wide(const wchar_t* wstr) { std::mbstate_t state = std::mbstate_t(); std::size_t len = 1 + std::wcsrtombs(nullptr, &wstr, 0, &state); std::vector<char> mbstr(len); std::wcsrtombs(&mbstr[0], &wstr, mbstr.size(), &state); std::cout << "multibyte string: " << &mbstr[0] << '\n' << "Length, including '\\0': " << mbstr.size() << '\n'; } 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ß水𝄋" print_wide(wstr); }
Вывод:
multibyte string: zß水𝄋 Length, including '\0': 11
Смотрите также
|
преобразует широкий символ в многобайтовое представление с учётом состояния
(функция) |
|
|
преобразует узкую многобайтовую строку символов в широкую строку с учётом состояния
(функция) |
|
|
[virtual]
|
преобразует строку из
InternT
в
ExternT
, например, при записи в файл
(виртуальная защищённая функция-член
std::codecvt<InternT,ExternT,StateT>
)
|
|
Документация C
для
wcsrtombs
|
|