std:: mbsrtowcs
|
Определено в заголовке
<cwchar>
|
||
|
std::
size_t
mbsrtowcs
(
wchar_t
*
dst,
const
char
**
src,
|
||
Преобразует нуль-терминированную многобайтовую последовательность символов, которая начинается в состоянии преобразования, описанном * ps , из массива, на первый элемент которого указывает * src , в её представление широкими символами. Если dst не является нулевым указателем, преобразованные символы сохраняются в последовательных элементах массива wchar_t, на который указывает dst . Не более чем len широких символов записывается в целевой массив.
Каждый многобайтовый символ преобразуется как при вызове std::mbrtowc . Преобразование останавливается, если:
-
Многобайтовый нулевой символ был преобразован и сохранён.
src
устанавливается в нулевой указатель, а
*psпредставляет начальное состояние сдвига. - Встречен недопустимый многобайтовый символ (в соответствии с текущей локалью C). src устанавливается на начало первого непреобразованного многобайтового символа.
- Следующий широкий символ для сохранения превысил бы len . src устанавливается на начало первого непреобразованного многобайтового символа. Это условие не проверяется, если dst является нулевым указателем.
Содержание |
Параметры
| dst | - | указатель на массив широких символов, в котором будут сохранены результаты |
| src | - | указатель на указатель на первый элемент многобайтовой строки с нулевым завершением |
| len | - | количество широких символов, доступных в массиве, на который указывает dst |
| ps | - | указатель на объект состояния преобразования |
Возвращаемое значение
При успехе возвращает количество широких символов, исключая завершающий L ' \0 ' , записанных в массив символов. Если dst является нулевым указателем, возвращает количество широких символов, которое было бы записано при неограниченной длине.
При ошибке преобразования (если встречен недопустимый многобайтовый символ) возвращает static_cast < std:: size_t > ( - 1 ) , сохраняет EILSEQ в errno и оставляет * ps в неопределённом состоянии.
Примечания
Эта функция перемещает указатель src в конец преобразованной многобайтовой строки. Это не происходит, если dst является нулевым указателем.
Пример
#include <clocale> #include <cwchar> #include <iostream> #include <vector> void print_as_wide(const char* mbstr) { std::mbstate_t state = std::mbstate_t(); std::size_t len = 1 + std::mbsrtowcs(nullptr, &mbstr, 0, &state); std::vector<wchar_t> wstr(len); std::mbsrtowcs(&wstr[0], &mbstr, wstr.size(), &state); std::wcout << "Wide string: " << &wstr[0] << '\n' << "The length, including '\\0': " << wstr.size() << '\n'; } int main() { std::setlocale(LC_ALL, "en_US.utf8"); const char* mbstr = "z\u00df\u6c34\U0001f34c"; // or u8"zß水🍌" print_as_wide(mbstr); }
Вывод:
Wide string: zß水🍌 The length, including '\0': 5
Смотрите также
|
преобразует следующий многобайтовый символ в широкий символ с учётом состояния
(функция) |
|
|
преобразует широкую строку в узкую многобайтовую строку с учётом состояния
(функция) |
|
|
[virtual]
|
преобразует строку из
ExternT
в
InternT
, например, при чтении из файла
(виртуальная защищённая функция-член
std::codecvt<InternT,ExternT,StateT>
)
|
|
Документация C
для
mbsrtowcs
|
|