mbsnrtowcs -
преобразует
многобайтовую
строку в
строку
широких
символов
Standard C library (
libc,
-lc)
#include <wchar.h>
size_t mbsnrtowcs(wchar_t dest[restrict .len], const char **restrict src,
size_t nms, size_t len, mbstate_t *restrict ps);
mbsnrtowcs():
Since glibc 2.10:
_POSIX_C_SOURCE >= 200809L
Before glibc 2.10:
_GNU_SOURCE
Функция
mbsnrtowcs()
похожа на
функцию
mbsrtowcs(3),
исключая
то, что
количество
преобразуемых
байт,
начиная с
*src,
ограничено
nms байтами.
Если
dest не
равно NULL, то
функция
mbsnrtowcs()
преобразует
не более
nms
байт
многобайтовой
строки
*src в
строку
широких
символов,
начинающуюся
с
dest. В
dest
будет
записано
не более
len
символов.
Обновляется
состояние
сдвига
*ps.
Эффективное
выполнение
преобразования
осуществляется
повторяющимися
вызовами
mbrtowc(dest, *src, n, ps), где
n —
некое
положительное
число, и
пока вызов
завершается
успешно,
увеличивая
dest на
единицу и
*src
на
количество
использованных
байт.
Преобразование
может
остановиться
по трём
причинам:
- •
- Во
входных
данных
обнаружена
неправильная
многобайтовая
последовательность.
В этом
случае *src
по-прежнему
указывает
на
неправильную
многобайтовую
последовательность,
возвращается
(size_t) -1 и errno
присваивается
EILSEQ.
- •
- The nms limit forces a stop, or len non-L'\0'
wide characters have been stored at dest. In this case, *src
is left pointing to the next multibyte sequence to be converted, and the
number of wide characters written to dest is returned.
- •
- The multibyte string has been completely converted,
including the terminating null wide character ('\0') (which has the side
effect of bringing back *ps to the initial state). In this case,
*src is set to NULL, and the number of wide characters written to
dest, excluding the terminating null wide character, is
returned.
Если
входной
буфер
заканчивается
неполным
символом, в
POSIX.1 не
указано
где
остановится
преобразование
— в конце
предыдущего
символа
(если есть)
или в конце
входного
буфера. В
реализации
glibc принят
первый
вариант.
Если
значение
dest
равно NULL, то
len
игнорируется
и
преобразование
выполняется
как
описано
выше,
исключая
то, что
преобразованные
широкие
символы не
записываются
в память и
нет
ограничения
на длину
строки
назначения.
В обоих
перечисленных
случаях,
если
ps
равно NULL, то
используется
статическое
анонимное
состояние,
известное
только
функции
mbsnrtowcs().
Программист
должен
проверить,
что в
dest есть
место по
крайней
мере для
len
широких
символов.
Функция
mbsnrtowcs()
возвращает
количество
широких
символов,
которые
составили
преобразованную
часть
широкосимвольной
строки, не
включая
конечный
широкий
символ null.
Если
обнаружена
некорректная
многобайтовая
последовательность,
то
возвращается
(size_t) -1, а
errno
присваивается
EILSEQ.
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
mbsnrtowcs() |
Безвредность
в нитях |
MT-Unsafe race:mbsnrtowcs/!ps |
POSIX.1-2008.
Поведение
mbsnrtowcs() зависит
от
категории
LC_CTYPE текущей
локали.
Передавать
NULL в качестве
ps
небезопасно
при работе
с нитями.
iconv(3),
mbrtowc(3),
mbsinit(3),
mbsrtowcs(3)
Русский
перевод
этой
страницы
руководства
был сделан
aereiae <
[email protected]>, Alexey <
[email protected]>, Azamat
Hackimov <
[email protected]>, Dmitriy S. Seregin
<
[email protected]>, Dmitry Bolkhovskikh <
[email protected]>,
ITriskTI <
[email protected]>, Max Is <
[email protected]>, Yuri
Kozlov <
[email protected]>, Иван
Павлов <
[email protected]>
и Малянов
Евгений
Викторович
<
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]