std::vwprintf, std::vfwprintf, std::vswprintf
Определено в заголовочном файле <cwchar>
|
||
int vwprintf( const wchar_t* format, va_list vlist ); |
(1) | |
int vfwprintf( std::FILE* stream, const wchar_t* format, va_list vlist ); |
(2) | |
int vswprintf( wchar_t* buffer, std::size_t buf_size, const wchar_t* format, va_list vlist ); |
(3) | |
Загружает данные из мест, определённых vlist
, преобразует их в эквивалентные широкие строки и записывает результаты в различные приёмники.
stream
.buffer
. Записывается не более size-1 широких символов, за которыми следует нулевой широкий символ.Содержание |
[править] Параметры
stream | — | выходной широкий поток для записи |
buffer | — | указатель на широкую строку для записи |
buf_size | — | максимальное количество широких символов для записи |
format | — | указатель на широкую строку с нулевым завершающим символом, определяющую, как интерпретировать данные |
vlist | — | список переменных аргументов, содержащий данные для вывода |
Строка форматирования состоит из печатных и пробельных символов (кроме %
), без изменения выводимых в выходной поток, и спецификаторов форматирования. Структура спецификатора:
- символ-маркер
%
- символ-маркер
- (необязательно) один или несколько флагов, которые изменяют поведение форматирования:
-
-
: выравнивание по левому краю внутри поля заданной ширины (по умолчанию по правому краю) -
+
: принудительная печать знака+
с положительными значениями (по умолчанию знаком дополняются только отрицательные значения) - пробел: не дополненные знаком или отсутствующие численные значения дополняются слева пробелом. Игнорируется, если присутствует флаг
+
. -
#
: выполнится альтернативное форматирование. См. таблицу ниже для подробностей: если альтернативное форматирование не определено, поведение не определено (UB). -
0
: при печати чисел в поле заданной ширины заполнение пустоты идёт нулями вместо пробелов. Для целых чисел флаг игнорируется, если задано количество выводимых знаков (точность). При печати не чисел вызывает неопределённое поведение (UB). Флаг игнорируется, если присутствует флаг-
.
-
- (необязательно) целое число, означающее минимальную ширину поля, или
*
. Свободное пространство в поле по умолчанию заполняется пробелами, выравнивание по правому краю. При использовании*
ширина поля задаётся дополнительным аргументом типа int. Отрицательное значение ширины эквивалентно применению дополнительно флага-
.
(Замечание: задаётся минимальная ширина поля, форматируемое значение никогда не обрезается.)
- (необязательно) целое число, означающее минимальную ширину поля, или
- (необязательно)
.
с целым числом,*
или просто.
. Число определяет точность. При использовании*
точность задаётся дополнительным аргументом типа int. Просто.
устанавливает нулевую точность. См. таблицу ниже для подробностей о действии точности на вывод.
- (необязательно)
- (необязательно)модификатор размера: определяет размер аргумента
- спецификатор формата вывода
Доступны следующие спецификаторы формата:
Спецификатор | Описание | Флаг размера | ||||||||
---|---|---|---|---|---|---|---|---|---|---|
hh
|
h
|
(нет) | l
|
ll
|
j
|
z
|
t
|
L
| ||
%
|
выводит символ % . Полный спецификатор формата %% .
|
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
c
|
Аргумент сначала приводится к wchar_t, как при вызове btowc.
Если использован флаг l, the |
Н/Д | Н/Д | int |
wint_t |
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
s
|
Аргумент должен быть указателем на первый элемент массива символов, содержащих последовательность байт в мультибайтовой кодировке без сдвига. Конвертируется в массив wchar, как при вызове mbrtowc. Точность определяет максимальное количество выведенных символов типа wchar. Если точностьне задана, выводит всё до первого встреченного нулевого символа (не включая его). Если использован флаг l, аргумент должен быть указателем на первый элемент массива wchar_t. |
Н/Д | Н/Д | char* |
wchar_t* |
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
d i
|
Точность определяет минимальное количество выводимых знаков. По умолчанию 1. |
signed char |
short |
int |
long |
long long |
intmax_t |
signed size_t |
ptrdiff_t |
Н/Д |
o
|
Точность определяет минимальное количество выводимых знаков. По умолчанию 1. |
unsigned char |
unsigned short |
unsigned int |
unsigned long |
unsigned long long |
uintmax_t |
size_t |
unsigned version of ptrdiff_t |
Н/Д |
x X
|
Формат |
Н/Д | ||||||||
u
|
Точность определяет минимальное количество выводимых знаков. По умолчанию 1. |
Н/Д | ||||||||
f F
|
Точность определяет минимальное количество выводимых знаков после запятой. По умолчанию 6. |
Н/Д | Н/Д | double |
double (начиная с C99) |
Н/Д | Н/Д | Н/Д | Н/Д | long double |
e E
|
Формат |
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | |||
a A
|
Формат |
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | |||
g G
|
Формат
Альтернативная реализация: выводит десятичную точку даже если мантисса целая; нули в конце не убираются. |
Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | |||
n
|
Результат записывается в переменную, на которую указывает параметр. Данный спецификатор не допускает использования каких-либо флагов и модификаторов. |
signed char* |
short* |
int* |
long* |
long long* |
intmax_t* |
size_t* |
ptrdiff_t* |
Н/Д |
p
|
|
Н/Д | Н/Д | void* | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
Формат чисел с плавающей запятой выводит бесконечность как NaN преобразуется в Несмотря на то, что Корректные преобразования для типов фиксированного размера (int8_t и прочих) объявлены в <cinttypes>(C++) или<inttypes.h> (C) (вызов PRIdMAX, PRIuMAX, и прочих соответствует Записывающий спецификатор %n - типичная цель для атак в случаях, когда строка формата зависит от пользовательского ввода. Не поддерживается семейством функций Каждый спецификатор формата происводит вычисление своего аргумента в момент печати. Это позволяет вызывать %n несколько раз и выводить результат действия предыдущего вызова %n в этом же вызове функции. Неправильный спецификатор формата вызывает неопределённое поведение (UB). |
[править] Возвращаемое значение
size
.[править] Примечание
Хотя узкие строки предоставляют std::vsnprintf, которая позволяет определить требуемый размер выходного буфера, для широких строк нет эквивалента, и для определения размера буфера программе может потребоваться вызвать std::vswprintf
, проверить значение результата и перераспределить больший буфер, повторяя попытки до достижения успеха.
[править] Пример
Этот раздел не завершён Причина: нет примера |
[править] Смотрите также
производит форматированный вывод в stdout, файловый поток или буфер (функция) | |
печатает вывод форматированных широких символов в stdout, файловый поток или буфер (функция) | |
Документация C по vwprintf, vfwprintf, vswprintf
|