Символы поля типа printf
В спецификации формата, символ type является описателем преобразования, который определяет, как должен интерпретироваться соответствующий аргумент: как символ, строка, указатель, целое число или число с плавающей точкой. Символ type — единственное необходимое поле спецификации формата; он находится после всех необязательных полей.
Аргументы, которые следуют за строкой формата, интерпретируются согласно соответствующему символу type и дополнительному префиксу size. Преобразования для типов символов char и wchar_t определяются с помощью c или C; однобайтовые и многобайтовые или строки с расширенными символами указываются с помощью s или S, в зависимости от того, какая функция форматирования используется. Символьные и строковые аргументы, которые указаны с помощью c и s интерпретируется как char и char* функциями семейства printf или как wchar_t и wchar_t* функциями семейства wprintf. Символьные и строковые аргументы, которые указаны с помощью C и S интерпретируется как wchar_t и wchar_t* функциями семейства printf или как char и char* функциями семейства wprintf.
Целочисленные типы, такие как short, int, long, long long и их unsigned варианты указываются с помощью d, i, o, u, x и X. Типы с плавающей точкой, например float, double и long double указываются с помощью a, A, e, E, f, g и G. По умолчанию, если не применяется префикс длины поля size, целочисленные аргументы приводятся к типу int, а аргументы с плавающей точкой приводятся к double. На 64-разрядных системах int является 32-разрядным значением; поэтому 64-разрядные целые числа будут усекаться при их форматировании для вывода, если не используется префикс size ll или I64. Для типов указателей, которые указываются с помощью p, используется длина по умолчанию для платформы.
Примечание
Символы типа C, S и Z и поведение символов типа c и s, если они будут использоваться с функциями printf и wprintf представляют собой расширения Microsoft, несовместимые со стандартами ANSI.Visual C++ не поддерживает символ типа F.
Символы поля типа printf
Символ типа |
Аргумент |
Формат вывода |
---|---|---|
c |
Символ |
При использовании с функциями printf определяет однобайтовый символ; при использовании с функциями wprintf определяет расширенный символ. |
C |
Символ |
При использовании с функциями printf определяет расширенный символ; при использовании с функциями wprintf определяет однобайтовый символ. |
d |
Целое |
Десятичное целое число со знаком. |
i |
Целое |
Десятичное целое число со знаком. |
o |
Целое |
Восьмеричное целое число без знака. |
u |
Целое |
Десятичное целое число без знака. |
x |
Целое |
Шестнадцатеричное целое число без знака, использует "abcdef". |
X |
Целое |
Шестнадцатеричное целое число без знака, использует "ABCDEF". |
e |
С плавающей запятой |
Значение со знаком, имеющее формат [ – ]d.dddd e [знак]dd[d], где d – одна десятичная цифра, dddd – одна или несколько десятичных цифр, dd[d] две или три десятичные цифры в зависимости от output format и размера экспоненты, и знак – символ + или –. |
E |
С плавающей запятой |
Аналогичен формату e, за исключением того, что вместо e порядок представляет E. |
f |
С плавающей запятой |
Значение со знаком, имеющее формат [ – ]dddd.dddd где dddd — одна или несколько десятичных цифр. Количество цифр перед десятичной точкой зависит от порядка числа, а количество цифр после десятичной точки зависит от указанной точности. |
g |
С плавающей запятой |
Значения со знаком отображаются в формате f или e, в зависимости от того, какой формат является более компактным для заданного значения и точности. Формат e используется только когда порядок значения меньше –4 или больше или равен аргументу precision. Нули в конце отбрасываются, а десятичная запятая отображается только в том случае, если за ней следует хотя бы одна цифра. |
G |
С плавающей запятой |
Аналогичен формату g, за исключением того, что вместо e порядок представляет E (где это необходимо). |
a |
С плавающей запятой |
Шестнадцатеричное значение с плавающей точкой двойной точности со знаком, которое имеет формат [−]0xh.hhhh p±dd, где h.hhhh − шестнадцатеричные цифры мантиссы (с использованием строчных букв) и dd − одна или более цифр порядка. Точность определяет количество цифр после запятой. |
A |
С плавающей запятой |
Шестнадцатеричное значение с плавающей точкой двойной точности со знаком, которое имеет формат [−]0Xh.hhhh P±dd, где h.hhhh − шестнадцатеричные цифры мантиссы (с использованием прописных букв) и dd − одна или более цифр порядка. Точность определяет количество цифр после запятой. |
n |
Указатель на целое число |
Число символов, которые успешно записаны на данный момент в поток или буфер. Это значение хранится в целом числе, адрес которого указан в качестве аргумента. См. примечание по безопасности ниже в данной статье. |
p |
Тип указателя |
Отображает аргумент как адрес в шестнадцатеричных цифрах. |
s |
Строковое |
При использовании с функциями printf определяет однобайтовую или многобайтовую строку символов; при использовании с функциями wprintf определяет строку расширенных символов. Символы отображаются до первого символа null или до тех пор, пока не будет достигнуто значение precision. |
S |
Строковое |
При использовании с функциями printf определяет строку расширенных символов; при использовании с функциями wprintf определяет однобайтовую или многобайтовую строку символов. Символы отображаются до первого символа null или до тех пор, пока не будет достигнуто значение precision. |
Z |
Структура ANSI_STRING или UNICODE_STRING |
Если адрес структуры ANSI_STRING или UNICODE_STRING передается в качестве аргумента, отображается строка, содержащаяся в буфере, на который указывает поле Buffer структуры. Используйте префиксы-модификаторы длины w для определения аргумента UNICODE_STRING, например %wZ. Поле Length структуры должно иметь значение длины строки в байтах. Поле MaximumLength структуры должно иметь значение длины буфера в байтах. Как правило, символ типа Z используется только в функциях отладки драйвера, которые используют такую спецификацию формата, как dbgPrint и kdPrint. |
Если аргумент, соответствующий описателю преобразования с плавающей точкой, равен бесконечности, не определён или не является числом (NAN), то будет выводится форматированный результат, который представлен в следующей таблице.
Значение |
Output |
---|---|
+бесконечность |
1.#INFслучайные-цифры |
–бесконечность |
–1.#INFслучайные-цифры |
Не определено (аналогично NaN без вызова исключения) |
цифра.#INDслучайные-цифры |
Не число (NAN) |
цифра.#NANслучайные-цифры |
Примечание
Если поле Buffer аргумента, который соответствует %Z, %s или %S является пустым указателем, то будет отображено "(NULL)".
Примечание
Во всех экспоненциальных форматах отображаемое количество цифр экспоненты по умолчанию равно трём.С помощью функции _set_output_format можно задать отображаемое количество цифр равным двум, с добавлением третьей цифры, если размер экспоненты этого требует.
![]() |
---|
Поскольку формат %n является небезопасным, он запрещен по умолчанию.Если %n обнаруживается в строке формата, вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров.Чтобы включить поддержку %n см. раздел _set_printf_count_output. |
См. также
Ссылки
printf, _printf_l, wprintf, _wprintf_l