WPRINTF(3) | Руководство программиста Linux | WPRINTF(3) |
wprintf, fwprintf, swprintf, vwprintf, vfwprintf, vswprintf - форматированный вывод широких символов
#include <stdio.h> #include <wchar.h>
int wprintf(const wchar_t *format, ...); int fwprintf(FILE *stream, const wchar_t *format, ...); int swprintf(wchar_t *wcs, size_t maxlen, const wchar_t *format, ...);
int vwprintf(const wchar_t *format, va_list args); int vfwprintf(FILE *stream, const wchar_t *format, va_list args); int vswprintf(wchar_t *wcs, size_t maxlen, const wchar_t *format, va_list args);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
Все функции, показанные выше:
Семейство функций wprintf() является эквивалентом семейства printf(3) для работы с широкими символами. Функции из этого семейства производят форматированный вывод широких символов.
Функции wprintf() и vwprintf() выводят широкие символы в поток stdout. stdout должен быть открыт не для байтовых операций; подробности смотрите в fwide(3).
Функции wprintf() и vwprintf() выводят широкие символы в поток stream. stream должен быть открыт не для байтовых операций; подробности смотрите в fwide(3).
Функции swprintf() и vswprintf() выводят широкие символы в массив широких символов. Программист должен быть уверен, что в wcs достаточно места для maxlen широких символов.
Все эти функции очень похожи на printf(3), vprintf(3), fprintf(3), vfprintf(3), sprintf(3), vsprintf(3), но отличаются от них в следующем:
Правила преобразования символов c и s различны:
Функции возвращают количество записанных широких символов, кроме завершающего нулевого символа для функций swprintf() и vswprintf(). В случае ошибки возвращается -1.
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
wprintf(), fwprintf(), swprintf(), vwprintf(), vfwprintf(), vswprintf() | Безвредность в нитях | MT-Safe locale |
POSIX.1-2001, POSIX.1-2008, C99.
Поведение wprintf() зависит от категории LC_CTYPE текущей локали.
Если строка format содержит широкие не ASCII символы, то программа будет работать корректно, только если категория LC_CTYPE текущей локали в момент выполнения действия совпадает с категорией LC_CTYPE текущей локали в момент компиляции. Это происходит потому, что представление wchar_t зависит от платформы и локали (glibc представляет широкие символы, используя универсальную кодовую таблицу Unicode (ISO-10646), но другие платформы могут не следовать этому. Кроме того, использование универсальных имён символов ISO C99 в форме \unnnn не решает этой проблемы). Следовательно, в многоязыковых программах строка format должна содержать только широкие символы из множества ASCII или должна создаваться во время выполнения с учётом многозыковости (например, с помощью gettext(3) или iconv(3), с последующим mbstowcs(3)).
2019-03-06 | GNU |