Символы поля типа 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 dd, где h.hhhh − шестнадцатеричные цифры мантиссы (с использованием строчных букв) и dd − одна или более цифр порядка. Точность определяет количество цифр после запятой.

A

С плавающей запятой

Шестнадцатеричное значение с плавающей точкой двойной точности со знаком, которое имеет формат [−]0Xh.hhhh 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

Синтаксис описания формата: функции printf и wprintf

Директивы флагов

Спецификация ширины printf

Спецификация точности

Спецификация размера

_set_output_format