WCRTOMB(3) | Руководство программиста Linux | WCRTOMB(3) |
wcrtomb - преобразование широкого символа в многобайтовую последовательность
#include <wchar.h>
size_t wcrtomb(char *s, wchar_t wc, mbstate_t *ps);
В основном, функция предназначена для работы, когда s не равно NULL и wc не равно широкому символу null (L'\0'). В этом случае функция wcrtomb() преобразует широкий символ wc в его многобайтовое представление и заносит его в начало массива символов, на который указывает s. Функция обновляет состояние сдвига *ps и возвращает длину получившегося многобайтового представления, то есть количество байтов, записанных в s.
Также есть вариант, когда s не равно NULL, но wc равно широкому символу null (L'\0'). В этом случае функция wcrtomb() заносит в массив символов, на который указывает s, последовательность сдвига, оканчивающуюся байтом '\0', необходимую для возврата *ps в начальное положение. Состояние сдвига *ps обновляется (переходит в исходное) и возвращается длина последовательности сдвига плюс один, то есть количество байт, записанных в s.
Третий случай — это когда s равно NULL. Тогда wc игнорируется, а функция возвращает
wcrtomb(buf, L'\0', ps)
где buf — внутренний анонимный буфер.
Во всех вышеперечисленных случаях, если ps равно NULL, то используется статическое анонимное состояние, известное только функции wcrtomb().
Функция wcrtomb() возвращает количество байтов, которые уже записаны или должны быть записаны в массив, на который указывает s. Если значение wc не может быть представлено как многобайтовая последовательность (в соответствии с текущей локалью), то возвращается (size_t) -1, а errno присваивается значение EILSEQ.
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
wcrtomb() | Безвредность в нитях | MT-Unsafe race:wcrtomb/!ps |
POSIX.1-2001, POSIX.1-2008, C99.
Поведение wcrtomb() зависит от категории LC_CTYPE текущей локали.
Передавать NULL в качестве ps небезопасно при работе с нитями.
2019-03-06 | GNU |