Синтаксис описания формата: функции printf и wprintf
Описывает синтаксис для аргументов строки формата в printf, wprintf, и связанных функций. Существуют более безопасные версии этих функций; дополнительные сведения см. в разделе Функции безопасности в CRT. Дополнительные сведения об отдельных функциях см. в документации по этим определенным функциям. Список этих функций см. в разделе Потоковый ввод-вывод.
Спецификация формата, состоящая из дополнительных и обязательных полей, имеет следующую форму:
%[flags] [width] [.precision] [{h | l | ll | w | I | I32 | I64}] type
Каждое поле спецификации формата - это символ или число, указывающее конкретный параметр формата или описатель преобразования. Обязательный символ type определяет тип преобразования, которое применяется к аргументу. Необязательные поля flags, width и precision управляют дополнительными аспектами формата. Базовая спецификация формата содержит только символ процента и символ type - например, %s, что определяет преобразование строк. Если за символом процента следует символ, который не имеет значения как поле формата, этот символ копируется в выходные данные без изменений. Чтобы вывести символ знака процента, используйте %%.
Поля спецификации формата управляют следующими аспектами преобразования и форматирования аргумента:
type
Обязательный знак описателя преобразования, который определяет, интерпретируется ли связанный argument как символ, строка, целое число или число с плавающей точкой. Для получения дополнительной информации см. Символы поля типа printf.flags
Дополнительный символ или символы, управляющие выравниванием выходных данных и выводом знаков, пробелов, ведущих нулей, десятичных точек и восьмеричных и шестнадцатеричных префиксов. Для получения дополнительной информации см. Директивы флагов. В спецификации формата может появиться больше одного флага, и флаги могут размещаться в любом порядке.width
Необязательное десятичное число, указывающее минимальное количество символов для вывода. Для получения дополнительной информации см. Спецификация ширины printf.precision
Необязательное десятичное число, указывающее максимальное количество символов, которые будут напечатаны в строках, количество значащих цифр или число цифр после десятичной точки для значений с плавающей точкой, или минимальное число цифр, которые будут напечатаны, для целых значений. Дополнительные сведения см. в подразделе «Как значения точности влияют на тип» раздела Спецификация точности.h | l | ll | w | I | I32 | I64
Необязательные префиксы в type, определяющие размер соответствующего аргумента. Дополнительные сведения см. в подразделе "Префиксы размера» раздела Спецификация размера.
Примечание по безопасности |
---|
Убедитесь, что строки спецификации формата не определяются пользователем.Например, рассмотрим программу, которая предлагает пользователю ввести имя и сохраняет данные в строковой переменной с именем name.Для печати name, не предпринимайте следующих действий: printf( name ); /* Danger! If name contains "%s", program will crash */ Вместо этого выполните следующие действия: printf( "%s", name ); |
См. также
Ссылки
printf, _printf_l, wprintf, _wprintf_l
printf_s, _printf_s_l, wprintf_s, _wprintf_s_l