mbstowcs, mbstowcs_s
|
Определено в заголовочном файле
<stdlib.h>
|
||
| (1) | ||
| (до C99) | ||
| (начиная с C99) | ||
|
errno_t mbstowcs_s
(
size_t
*
restrict
retval,
wchar_t
*
restrict
dst,
rsize_t dstsz, const char * restrict src, rsize_t len ) ; |
(2) | (начиная с C11) |
src
, в её широкосимвольное представление. Преобразованные символы сохраняются в последовательных элементах массива, на который указывает
dst
. Не более чем
len
широких символов записывается в целевой массив.
len
.
src
и
dst
перекрываются, поведение не определено
retval
dst
после записи
len
широких символов, тогда
L
'
\0
'
сохраняется в
dst[len]
, что означает запись len+1 всего широких символов
dst
является нулевым указателем, количество широких символов, которое было бы сгенерировано, сохраняется в
*
retval
dstsz
src
и
dst
перекрываются, поведение не определено.
-
-
retvalилиsrcявляется нулевым указателем -
dstszилиlenбольше чем RSIZE_MAX/sizeof(wchar_t) (если толькоdstне является нулевым) -
dstszне равно нулю (если толькоdstне является нулевым) -
В первых
dstszмногобайтовых символах массиваsrcотсутствует нулевой символ иlenбольше чемdstsz(если толькоdstне является нулевым)
-
-
Как и все функции с проверкой границ,
mbstowcs_sгарантированно доступна только если __STDC_LIB_EXT1__ определено реализацией и если пользователь определяет __STDC_WANT_LIB_EXT1__ как целочисленную константу 1 перед включением <stdlib.h> .
Содержание |
Примечания
В большинстве реализаций
mbstowcs
обновляет глобальный статический объект типа
mbstate_t
в процессе обработки строки и не может быть вызван одновременно из двух потоков.
mbsrtowcs
следует использовать в таких случаях.
POSIX определяет общее расширение: если
dst
является нулевым указателем, эта функция возвращает количество широких символов, которые были бы записаны в
dst
, при преобразовании. Аналогичное поведение стандартно для
mbstowcs_s
и для
mbsrtowcs
.
Параметры
| dst | - | указатель на массив широких символов, в котором будет сохранена широкая строка |
| src | - | указатель на первый элемент многобайтовой строки с нулевым завершителем для преобразования |
| len | - | количество широких символов, доступных в массиве, на который указывает dst |
| dstsz | - |
максимальное количество широких символов, которое будет записано (размер массива
dst
)
|
| retval | - | указатель на объект size_t, в котором будет сохранен результат |
Возвращаемое значение
dst
, сохраняется в
*
retval
), не ноль при ошибке. В случае нарушения ограничения времени выполнения, сохраняет
(
size_t
)
-
1
в
*
retval
(если
retval
не является нулевым указателем) и устанавливает
dst
[
0
]
в
L
'
\0
'
(если
dst
не является нулевым указателем или
dstmax
не равен нулю или не больше
RSIZE_MAX
)
Пример
#include <stdio.h> #include <locale.h> #include <stdlib.h> #include <wchar.h> int main(void) { setlocale(LC_ALL, "en_US.utf8"); const char* mbstr = u8"z\u00df\u6c34\U0001F34C"; // or u8"zß水🍌" wchar_t wstr[5]; mbstowcs(wstr, mbstr, 5); wprintf(L"MB string: %s\n", mbstr); wprintf(L"Wide string: %ls\n", wstr); }
Вывод:
MB string: zß水🍌 Wide string: zß水🍌
Ссылки
- Стандарт C11 (ISO/IEC 9899:2011):
-
- 7.22.8.1 Функция mbstowcs (стр. 359)
-
- K.3.6.5.1 Функция mbstowcs_s (стр. 611-612)
- Стандарт C99 (ISO/IEC 9899:1999):
-
- 7.20.8.1 Функция mbstowcs (стр. 323)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
-
- 4.10.8.1 Функция mbstowcs
Смотрите также
|
(C95)
(C11)
|
преобразует строку многобайтовых символов в широкую строку с учетом состояния
(функция) |
|
(C11)
|
преобразует широкую строку в строку многобайтовых символов
(функция) |
|
Документация C++
для
mbstowcs
|
|