Пространства имён
Варианты
Действия

std::vprintf, std::vfprintf, std::vsprintf, std::vsnprintf

Материал из cppreference.com
< cpp‎ | io‎ | c


 
 
Библиотека ввода/вывода
Манипуляторы ввода/вывода
Функции print (C++23)
Ввод/вывод в стиле C
Буферы
(устарело в C++98)
Потоки
Абстракции
Файловый ввод/вывод
Ввод/вывод строк
Ввод/вывод массивов
(устарело в C++98)
(устарело в C++98)
(устарело в C++98)
Синхронизированный вывод
Типы
Интерфейс категорий ошибок
(C++11)
 
Ввод/Вывод в стиле C
Типы и объекты
Функции
Доступ к файлам
Прямой ввод/вывод
Неформатированный ввод/вывод
Форматированный ввод
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
Форматированный вывод
vprintfvfprintfvsprintfvsnprintf
(C++11)    
Позиционирование файла
Обработ��а ошибок
Операции с файлами
 
Определено в заголовочном файле <cstdio>
int vprintf( const char* format, va_list vlist );
(1)
int vfprintf( FILE *stream, const char *format, va_list vlist );
(2)
int vsprintf( const char *buffer, const char *format, va_list vlist );
(3)
int vsnprintf( char *buffer, int buf_size, const char *format, va_list vlist );
(4) (начиная с C++11)
Загружает данные из мест, определенных vlist, преобразует их в строку символов эквиваленты и записывает результаты в различных поглотителей.
Оригинал:
Loads the data from the locations, defined by vlist, converts them to character string equivalents and writes the results to a variety of sinks.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
1)
Записывает результаты в stdout.
Оригинал:
Writes the results to stdout.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
2)
Записывает результаты в файл потока stream.
Оригинал:
Writes the results to a file stream stream.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
3)
Записывает результаты в buffer буквенная.
Оригинал:
Writes the results to a character string buffer.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
4)
Записывает результаты в buffer строку символов. В большинстве символы buf_size написаны. В результате символьная строка будет завершен нулевой символ, если buf_size равна нулю.
Оригинал:
Writes the results to a character string buffer. At most buf_size characters are written. The resulting character string will be terminated with a null character, unless buf_size is zero.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

[править] Параметры

stream Поток выходного файла, в который будет записан результат.
buffer Указатель на символольную строку, в которую будет записан результат.
buf_size
Максимальное количество символов для записи
Оригинал:
maximum number of characters to write
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
format
Указатель на завершающуюся нулем строку, определяющую характер, как интерпретировать эти данные.

Строка форматирования состоит из печатных и пробельных символов (кроме %), без изменения выводимых в выходной поток, и спецификаторов форматирования. Структура спецификатора:

  • символ-маркер %
  • (необязательно) один или несколько флагов, которые изменяют поведение форматирования:
  • -: выравнивание по левому краю внутри поля заданной ширины (по умолчанию по правому краю)
  • +: принудительная печать знака + с положительными значениями (по умолчанию знаком дополняются только отрицательные значения)
  • пробел: не дополненные знаком или отсутствующие численные значения дополняются слева пробелом. Игнорируется, если присутствует флаг +.
  • #: выполнится альтернативное форматирование. См. таблицу ниже для подробностей: если альтернативное форматирование не определено, поведение не определено (UB).
  • 0: при печати чисел в поле заданной ширины заполнение пустоты идёт нулями вместо пробелов. Для целых чисел флаг игнорируется, если задано количество выводимых знаков (точность). При печати не чисел вызывает неопределённое поведение (UB). Флаг игнорируется, если присутствует флаг -.
  • (необязательно) целое число, означающее минимальную ширину поля, или *. Свободное пространство в поле по умолчанию заполняется пробелами, выравнивание по правому краю. При использовании * ширина поля задаётся дополнительным аргументом типа int. Отрицательное значение ширины эквивалентно применению дополнительно флага -.
    (Замечание: задаётся минимальная ширина поля, форматируемое значение никогда не обрезается.)
  • (необязательно) . с целым числом, * или просто .. Число определяет точность. При использовании * точность задаётся дополнительным аргументом типа int. Просто . устанавливает нулевую точность. См. таблицу ниже для подробностей о действии точности на вывод.
  • (необязательно)модификатор размера: определяет размер аргумента
  • спецификатор формата вывода

Доступны следующие спецификаторы формата:

Спецификатор Описание Флаг размера
hh h (нет) l ll j z t L
% выводит символ %. Полный спецификатор формата %%. Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д
c
выводит символ

Аргумент сначала приводится к unsigned char. Если использован флаг l, аргумент сначала конвертируется в строку, как при использовании %ls с аргументом типа wchar_t[2].

Н/Д Н/Д
int
wint_t
Н/Д Н/Д Н/Д Н/Д Н/Д
s
выводит строку

Аргумент должен быть указателем на первый элемент массива символов. Точность определяет максимальное количество выведенных байт. Если точностьне задана, выводит всё до первого встреченного нулевого символа (не включая его). Если использован флаг l, аргумент должен быть указателем на первый элемент массива wchar_t, который преобразуется в массив char, как при вызове wcrtomb.

Н/Д Н/Д
char*
wchar_t*
Н/Д Н/Д Н/Д Н/Д Н/Д
d
i
форматирует знаковое целое как десятичное число в виде [-][0-9]*

Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.

signed char
short
int
long
long long
intmax_t
signed size_t
ptrdiff_t
Н/Д
o
форматирует беззнаковое целое как восьмеричное число в виде [0-7]*

Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.
Альтернативная реализация: при необходимости точность повышается, чтобы добавить ноль слева. Таким образом, если форматированное значение и точность являются 0, выводится 0.

unsigned char
unsigned short
unsigned int
unsigned long
unsigned long long
uintmax_t
size_t
unsigned version of ptrdiff_t
Н/Д
x
X
форматирует беззнаковое целое как шестнадцатеричное число в виде [0-F]*

Формат x использует буквы abcdef.
Формат X использует буквы ABCDEF.
Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.
Альтернативная реализация: ненулевые значения выводятся с приставкой 0x или 0X соответственно.

Н/Д
u
форматирует беззнаковое целое как десятичное число в виде [0-9]*

Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.

Н/Д
f
F
форматирует число с плавающей запятой в виде [-]d.d, где d - произвольные десятичные числа

Точность определяет минимальное количество выводимых знаков после запятой. По умолчанию 6.
Альтернативная реализация: выводит десятичную точку даже если число целое.
Форматирование бесконечности и NaN см. в примечаниях.

Н/Д Н/Д
double
double (начиная с C99)
Н/Д Н/Д Н/Д Н/Д
long double
e
E
форматирует число с плавающей запятой в экспоненициальной форме: AeB == A * pow (10, B)

Формат e использует букву e: AeB.
Формат E использует букву E: AEB.
Экспонента содержит не менее 2 цифр.
Точность определяет минимальное количество выводимых знаков после запятой. По умолчанию 6.
Альтернативная реализация: выводит десятичную точку даже если мантисса целая.
Форматирование бесконечности и NaN см. в примечаниях.

Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д
a
A
форматирует число с плавающей запятой в шестнадцаеричной экспоненциальной форме

Формат a выводит [-]0xh.hhhp±d.
Формат A выводит [-]0Xh.hhhP±d.
Если число не нормализовано, первой цифрой выводится 0.
Если число 0, экпонента тоже 0.
Точность определяет минимальное количество выводимых знаков после запятой. По умолчанию выбирается значение, достаточное для полного вывода.
Альтернативная реализация: выводит десятичную точку даже если мантисса целая.
Форматирование бесконечности и NaN см. в примечаниях.

Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д
g
G
форматирует число с плавающей запятой в десятичной или десятичной экспоненциальной форме в зависимости от значения и точности

Формат g выводит в формате e или f.
Формат G выводит в формате E или F.
Пусть P - параметр точности вывода. означает, что точность не задана, означает, что точность 0; в остальных случаях, если , точность равняется P. Если точность числа P, а экспонента при выводе в десятичном формате X, то:

  • Если P> X ≥ -4, используется формат f / F с точностью -1 - X.
  • Иначе используется формат e / E с точностью P - 1

Альтернативная реализация: выводит десятичную точку даже если мантисса целая; нули в конце не убираются.
Форматирование бесконечности и NaN см. в примечаниях.

Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д
n
возвращает число символов, записанных данным вызовом функции к ��оменту %n.

Результат записывается в переменную, на которую указывает параметр. Данный спецификатор не допускает использования каких-либо флагов и модификаторов.

signed char*
short*
int*
long*
long long*
intmax_t*
size_t*
ptrdiff_t*
Н/Д
p
выводит указатель в зависящем от реализации виде.
Н/Д Н/Д void* Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д

Формат чисел с плавающей запятой выводит бесконечность как inf или infinity в зависимости от реализации.

NaN преобразуется в nan или nan(char_sequence) в зависимости от реализации. Форматы F, E, G, A выводят INF, INFINITY, NAN.

Несмотря на то, что %c принимает параметр типа int, передавать char безопасно из-за преобразования к int при разборе аргументов форматирования.

Корректные преобразования для типов фиксированного размера (int8_t и прочих) объявлены в <cinttypes>(C++) или<inttypes.h> (C) (вызов PRIdMAX, PRIuMAX, и прочих соответствует %jd, %ju и т.д.).

Записывающий спецификатор %n - типичная цель для атак в случаях, когда строка формата зависит от пользовательского ввода. Не поддерживается семейством функций printf_s.

Каждый спецификатор формата происводит вычисление своего аргумента в момент печати. Это позволяет вызывать %n несколько раз и выводить результат действия предыдущего вызова %n в этом же вызове функции.

Неправильный спецификатор формата вызывает неопределённое поведение (UB).

Оригинал:
pointer to a null-terminated character string specifying how to interpret the data.

Строка форматирования состоит из печатных и пробельных символов (кроме %), без изменения выводимых в выходной поток, и спецификаторов форматирования. Структура спецификатора:

  • символ-маркер %
  • (необязательно) один или несколько флагов, которые изменяют поведение форматирования:
  • -: выравнивание по левому краю внутри поля заданной ширины (по умолчанию по правому краю)
  • +: принудительная печать знака + с положительными значениями (по умолчанию знаком дополняются только отрицательные значения)
  • пробел: не дополненные знаком или отсутствующие численные значения дополняются слева пробелом. Игнорируется, если присутствует флаг +.
  • #: выполнится альтернативное форматирование. См. таблицу ниже для подробностей: если альтернативное форматирование не определено, поведение не определено (UB).
  • 0: при печати чисел в поле заданной ширины заполнение пустоты идёт нулями вместо пробелов. Для целых чисел флаг игнорируется, если задано количество выводимых знаков (точность). При печати не чисел вызывает неопределённое поведение (UB). Флаг игнорируется, если присутствует флаг -.
  • (необязательно) целое число, означающее минимальную ширину поля, или *. Свободное пространство в поле по умолчанию заполняется пробелами, выравнивание по правому краю. При использовании * ширина поля задаётся дополнительным аргументом типа int. Отрицательное значение ширины эквивалентно применению дополнительно флага -.
    (Замечание: задаётся минимальная ширина поля, форматируемое значение никогда не обрезается.)
  • (необязательно) . с целым числом, * или просто .. Число определяет точность. При использовании * точность задаётся дополнительным аргументом типа int. Просто . устанавливает нулевую точность. См. таблицу ниже для подробностей о действии точности на вывод.
  • (необязательно)модификатор размера: определяет размер аргумента
  • спецификатор формата вывода

Доступны следующие спецификаторы формата:

Спецификатор Описание Флаг размера
hh h (нет) l ll j z t L
% выводит символ %. Полный спецификатор формата %%. Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д
c
выводит символ

Аргумент сначала приводится к unsigned char. Если использован флаг l, аргумент сначала конвертируется в строку, как при использовании %ls с аргументом типа wchar_t[2].

Н/Д Н/Д
int
wint_t
Н/Д Н/Д Н/Д Н/Д Н/Д
s
выводит строку

Аргумент должен быть указателем на первый элемент массива символов. Точность определяет максимальное количество выведенных байт. Если точностьне задана, выводит всё до первого встреченного нулевого символа (не включая его). Если использован флаг l, аргумент должен быть указателем на первый элемент массива wchar_t, который преобразуется в массив char, как при вызове wcrtomb.

Н/Д Н/Д
char*
wchar_t*
Н/Д Н/Д Н/Д Н/Д Н/Д
d
i
форматирует знаковое целое как десятичное число в виде [-][0-9]*

Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.

signed char
short
int
long
long long
intmax_t
signed size_t
ptrdiff_t
Н/Д
o
форматирует беззнаковое целое как восьмеричное число в виде [0-7]*

Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.
Альтернативная реализация: при необходимости точность повышается, чтобы добавить ноль слева. Таким образом, если форматированное значение и точность являются 0, выводится 0.

unsigned char
unsigned short
unsigned int
unsigned long
unsigned long long
uintmax_t
size_t
unsigned version of ptrdiff_t
Н/Д
x
X
форматирует беззнаковое целое как шестнадцатеричное число в виде [0-F]*

Формат x использует буквы abcdef.
Формат X использует буквы ABCDEF.
Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.
Альтернативная реализация: ненулевые значения выводятся с приставкой 0x или 0X соответственно.

Н/Д
u
форматирует беззнаковое целое как десятичное число в виде [0-9]*

Точность определяет минимальное количество выводимых знаков. По умолчанию 1.
Если форматированное значение и точность являются 0, ничего не выводится.

Н/Д
f
F
форматирует число с плавающей запятой в виде [-]d.d, где d - произвольные десятичные числа

Точность определяет минимальное количество выводимых знаков после запятой. По умолчанию 6.
Альтернативная реализация: выводит десятичную точку даже если число целое.
Форматирование бесконечности и NaN см. в примечаниях.

Н/Д Н/Д
double
double (начиная с C99)
Н/Д Н/Д Н/Д Н/Д
long double
e
E
форматирует число с плавающей запятой в экспоненициальной форме: AeB == A * pow (10, B)

Формат e использует букву e: AeB.
Формат E использует букву E: AEB.
Экспонента содержит не менее 2 цифр.
Точность определяет минимальное количество выводимых знаков после запятой. По умолчанию 6.
Альтернативная реализация: выводит десятичную точку даже если мантисса целая.
Форматирование бесконечности и NaN см. в примечаниях.

Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д
a
A
форматирует число с плавающей запятой в шестнадцаеричной экспоненциальной форме

Формат a выводит [-]0xh.hhhp±d.
Формат A выводит [-]0Xh.hhhP±d.
Если число не нормализовано, первой цифрой выводится 0.
Если число 0, экпонента тоже 0.
Точность определяет минимальное количество выводимых знаков после запятой. По умолчанию выбирается значение, достаточное для полного вывода.
Альтернативная реализация: выводит десятичную точку даже если мантисса целая.
Форматирование бесконечности и NaN см. в примечаниях.

Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д
g
G
форматирует число с плавающей запятой в десятичной или десятичной экспоненциальной форме в зависимости от значения и точности

Формат g выводит в формате e или f.
Формат G выводит в формате E или F.
Пусть P - параметр точности вывода. означает, что точность не задана, означает, что точность 0; в остальных случаях, если , точность равняется P. Если точность числа P, а экспонента при выводе в десятичном формате X, то:

  • Если P> X ≥ -4, используется формат f / F с точностью -1 - X.
  • Иначе используется формат e / E с точностью P - 1

Альтернативная реализация: выводит десятичную точку даже если мантисса целая; нули в конце не убираются.
Форматирование бесконечности и NaN см. в примечаниях.

Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д
n
возвращает число символов, записанных данным вызовом функции к моменту %n.

Результат записывается в переменную, на которую указывает параметр. Данный спецификатор не допускает использования каких-либо флагов и модификаторов.

signed char*
short*
int*
long*
long long*
intmax_t*
size_t*
ptrdiff_t*
Н/Д
p
выводит указатель в зависящем от реализации виде.
Н/Д Н/Д void* Н/Д Н/Д Н/Д Н/Д Н/Д Н/Д

Формат чисел с плавающей запятой выводит бесконечность как inf или infinity в зависимости от реализации.

NaN преобразуется в nan или nan(char_sequence) в зависимости от реализации. Форматы F, E, G, A выводят INF, INFINITY, NAN.

Несмотря на то, что %c принимает параметр типа int, передавать char безопасно из-за преобразования к int при разборе аргументов форматирования.

Корректные преобразования для типов фиксированного размера (int8_t и прочих) объявлены в <cinttypes>(C++) или<inttypes.h> (C) (вызов PRIdMAX, PRIuMAX, и прочих соответствует %jd, %ju и т.д.).

Записывающий спецификатор %n - типичная цель для атак в случаях, когда строка формата зависит от пользовательского ввода. Не поддерживается семейством функций printf_s.

Каждый спецификатор формата происводит вычисление своего аргумента в момент печати. Это позволяет вызывать %n несколько раз и выводить результат действия предыдущего вызова %n в этом же вызове функции.

Неправильный спецификатор формата вызывает неопределённое поведение (UB).

Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
vlist
переменным списком параметров, содержащий данные для печати
Оригинал:
variable argument list containing the data to print
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Возвращаемое значение

1-3)
Количество символов написаны в случае успеха или отрицательное значение, если произошла ошибка.
Оригинал:
Number of characters written if successful or negative value if an error occurred.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
4)
Количество символов написаны в случае успеха или отрицательное значение, если произошла ошибка. Если в результате строка остается усеченным из-за предела buf_size, функция возвращает общее количество символов (не включая завершающий нулевой байт), которая была бы написана, если лимит не был навязан.
Оригинал:
Number of characters written if successful or negative value if an error occurred. If the resulting string gets truncated due to buf_size limit, function returns the total number of characters (not including the terminating null-byte) which would have been written, if the limit was not imposed.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Пример

[править] См. также

отпечатки отформатировать вывод stdout, поток файл или буфер
Оригинал:
prints formatted output to stdout, a file stream or a buffer
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
(C++11)(C++11)(C++11)
читается форматированный ввод из stdin, поток файла или buffer
помощью переменной список аргументов
Оригинал:
reads formatted input from stdin, a file stream or a buffer
using variable argument list
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
Документация C по vprintf, vfprintf, vsprintf, vsnprintf