Синтаксис спецификации формата: printf и wprintf функцииFormat specification syntax: printf and wprintf functions

Различные функции printf и wprintf принимают строку формата и необязательные аргументы и создают форматированную последовательность символов для выходных данных.The various printf and wprintf functions take a format string and optional arguments and produce a formatted sequence of characters for output. Строка формата не содержит ни одной или содержит несколько директив, которые являются либо литеральными символами для выходных данных, либо закодированными спецификациями преобразования, описывающими способ форматирования аргумента в выходных данных.The format string contains zero or more directives, which are either literal characters for output or encoded conversion specifications that describe how to format an argument in the output. Эта статья описывает синтаксис для кодирования спецификаций преобразования в строке формата.This article describes the syntax used to encode conversion specifications in the format string. Список этих функций см. в разделе Потоковый ввод-вывод.For a listing of these functions, see Stream I/O.

Спецификация преобразования состоит из необязательных и обязательных полей, имеющих следующий вид:A conversion specification consists of optional and required fields in this form:

%[flags] [Ширина] [. точность] [Размер] тип%[flags][width][.precision][size]type

Каждое поле спецификации преобразования — это символ или число, указывающее конкретный параметр формата или описатель преобразования.Each field of the conversion specification is a character or a number that signifies a particular format option or conversion specifier. Обязательное поле type определяет тип преобразования, которое применяется к аргументу.The required type field specifies the kind of conversion to be applied to an argument. Необязательные поля flags, width и precision управляют дополнительными аспектами формата, такими как начальные пробелы или нули, выравнивание и отображаемая точность.The optional flags, width, and precision fields control additional format aspects such as leading spaces or zeroes, justification, and displayed precision. Поле size указывает размер использованного и преобразованного аргумента.The size field specifies the size of the argument consumed and converted.

Базовая спецификация преобразования содержит только символ процента и символ type.A basic conversion specification contains only the percent sign and a type character. Например, %s определяет преобразование строк.For example, %s specifies a string conversion. Чтобы вывести символ знака процента, используйте %%.To print a percent-sign character, use %%. Если за символом процента следует символ, который не имеет смысла в поле формата, вызывается обработчик недопустимого параметра.If a percent sign is followed by a character that has no meaning as a format field, the invalid parameter handler is invoked. Дополнительные сведения см. в разделе Проверка параметров.For more information, see Parameter Validation.

Важно!

Для обеспечения безопасности и стабильности убедитесь, что строки спецификации преобразования не определяются пользователем.For security and stability, ensure that conversion specification strings are not user-defined. Например, рассмотрим программу, которая предлагает пользователю ввести имя и сохраняет введенные данные в строковой переменной с именем user_name.For example, consider a program that prompts the user to enter a name and stores the input in a string variable that's named user_name. Для печати переменной user_name не используйте следующий код:To print user_name, do not do this:

printf( user_name ); /* Danger! If user_name contains "%s", program will crash */

Вместо этого используйте следующий код:Instead, do this:

printf( "%s", user_name );

Примечание

В Visual Studio 2015 printf функции и scanf семейство функций были объявлены как inline и перемещены в <stdio.h> <conio.h> заголовки и.In Visual Studio 2015 The printf and scanf family of functions were declared as inline and moved to the <stdio.h> and <conio.h> headers. При переносе старого кода вы можете увидеть ошибку LNK2019 в подключении к этим функциям.If you are migrating older code you might see LNK2019 in connection with these functions. Дополнительные сведения см. в статье Visual C++ журнал изменений 2003-2015.For more information, see Visual C++ change history 2003 - 2015.

Спецификатор преобразования типовType conversion specifier

Символ спецификации преобразования type определяет, как должен интерпретироваться соответствующий аргумент: как символ, строка, указатель, целое число или число с плавающей запятой.The type conversion specifier character specifies whether to interpret the corresponding argument as a character, a string, a pointer, an integer, or a floating-point number. Символ type — единственное обязательное поле спецификации преобразования; он указывается после всех необязательных полей.The type character is the only required conversion specification field, and it appears after any optional fields.

Аргументы, которые следуют за строкой формата, интерпретируются согласно соответствующему символу type и необязательному префиксу size.The arguments that follow the format string are interpreted according to the corresponding type character and the optional size prefix. Преобразования для символьных типов и задаются с char wchar_t помощью c или C , а строки однобайтовых и многобайтовых или расширенных символов задаются с помощью s или S , в зависимости от того, какая функция форматирования используется.Conversions for character types char and wchar_t are specified by using c or C, and single-byte and multi-byte or wide character strings are specified by using s or S, depending on which formatting function is being used. Символьные и строковые аргументы, заданные с помощью c и s , обрабатываются как char и char* printf функциями семейства, а также как wchar_t и wchar_t* wprintf функциями семейства.Character and string arguments that are specified by using c and s are interpreted as char and char* by printf family functions, or as wchar_t and wchar_t* by wprintf family functions. Символьные и строковые аргументы, заданные с помощью C и S , обрабатываются как wchar_t и wchar_t* printf функциями семейства, а также как char и char* wprintf функциями семейства.Character and string arguments that are specified by using C and S are interpreted as wchar_t and wchar_t* by printf family functions, or as char and char* by wprintf family functions. Такое поведение характерно для Microsoft.This behavior is Microsoft-specific.

Целочисленные типы, такие как,,, short int long long long и их варианты, задаются unsigned с помощью d , i , o ,, u x и X .Integer types such as short, int, long, long long, and their unsigned variants, are specified by using d, i, o, u, x, and X. Типы с плавающей запятой, такие как float , double и long double , задаются с помощью a , A , e , E , f , F , g и G .Floating-point types such as float, double, and long double, are specified by using a, A, e, E, f, F, g, and G. По умолчанию, если они не изменяются префиксом размера , целочисленные аргументы приводятся к int типу, а аргументы с плавающей запятой приводятся к double .By default, unless they're modified by a size prefix, integer arguments are coerced to int type, and floating-point arguments are coerced to double. В 64-разрядных системах int значение является 32-битным значением, поэтому 64-разрядные целые числа будут обрезаны при форматировании для вывода, если не используется префикс размера LL или I64 .On 64-bit systems, an int is a 32-bit value; so, 64-bit integers will be truncated when they're formatted for output unless a size prefix of ll or I64 is used. Типы указателей, заданные с помощью, p используют размер указателя по умолчанию для платформы.Pointer types that are specified by p use the default pointer size for the platform.

Примечание

Зависит от корпорации Майкрософт:Microsoft-specific:
Z Символ типа, а также поведение c C s символов типа,, и, S если они используются с printf wprintf функциями и, являются расширениями Майкрософт.The Z type character, and the behavior of the c, C, s, and S type characters when they're used with the printf and wprintf functions, are Microsoft extensions. Стандарт ISO C использует c и s согласованно для узких символов и строк, а C также S для расширенных символов и строк во всех функциях форматирования.The ISO C standard uses c and s consistently for narrow characters and strings, and C and S for wide characters and strings, in all formatting functions.

Символы поля типаType field characters

Символ типаType character АргументArgument Формат выводаOutput format
c ЗнакCharacter При использовании с функциями printf определяет однобайтовый символ; при использовании с функциями wprintf определяет расширенный символ.When used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.
C ЗнакCharacter При использовании с функциями printf определяет расширенный символ; при использовании с функциями wprintf определяет однобайтовый символ.When used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character.
d Целое числоInteger Десятичное целое число со знаком.Signed decimal integer.
i Целое числоInteger Десятичное целое число со знаком.Signed decimal integer.
o Целое числоInteger Восьмеричное целое число без знака.Unsigned octal integer.
u Целое числоInteger Десятичное целое число без знака.Unsigned decimal integer.
x Целое числоInteger Шестнадцатеричное целое число без знака; использует " abcdef ".Unsigned hexadecimal integer; uses "abcdef".
X Целое числоInteger Шестнадцатеричное целое число без знака; использует " ABCDEF ".Unsigned hexadecimal integer; uses "ABCDEF".
e С плавающей запятойFloating-point Значение со знаком, имеющее форму [-] d.dddd e ± dd [ d ], где d — одна десятичная цифра, dddd — одна или несколько десятичных цифр в зависимости от указанной точности, или шесть по умолчанию, а dd [ d ] — две или три десятичные цифры в зависимости от формата выходных данных и размера экспоненты.Signed value that has the form [-]d.dddddd[d], where d is one decimal digit, dddd is one or more decimal digits depending on the specified precision, or six by default, and dd[d] is two or three decimal digits depending on the output format and size of the exponent.
E С плавающей запятойFloating-point Аналогично e формату, за исключением того, что E e он представляет экспоненту.Identical to the e format except that E rather than e introduces the exponent.
f С плавающей запятойFloating-point Значение со знаком, имеющее форму [-] dddd . dddd , где dddd — одна или несколько десятичных цифр.Signed value that has the form [-]dddd.dddd, where dddd is one or more decimal digits. Количество цифр перед десятичной запятой зависит от величины числа, а количество знаков после десятичной запятой зависит от указанной точности либо используется шесть по умолчанию.The number of digits before the decimal point depends on the magnitude of the number, and the number of digits after the decimal point depends on the requested precision, or six by default.
F С плавающей запятойFloating-point Идентично f формату, за исключением того, что выходные данные бесконечности и NaN заменяются прописными буквами.Identical to the f format except that infinity and nan output is capitalized.
g С плавающей запятойFloating-point Значения со знаком отображаются в f e формате или, в зависимости от более компактных значений для заданного значения и точности.Signed values are displayed in f or e format, whichever is more compact for the given value and precision. e Формат используется только в том случае, если экспонента значения меньше-4 или больше или равна аргументу точности .The e format is used only when the exponent of the value is less than -4 or greater than or equal to the precision argument. Нули в конце отбрасываются, а десятичная запятая отображается только в том случае, если за ней следует хотя бы одна цифра.Trailing zeros are truncated, and the decimal point appears only if one or more digits follow it.
G С плавающей запятойFloating-point Аналогично g формату, за исключением того, что E e в нем вводится экспонента (где это необходимо).Identical to the g format, except that E, rather than e, introduces the exponent (where appropriate).
a С плавающей запятойFloating-point Подписанное шестнадцатеричное значение двойной точности с плавающей запятой, имеющее форму [-] 0xh. hhhhp ± dd , где h. hhhh — шестнадцатеричные цифры мантиссаа, а dd — одна или несколько цифр для экспоненты.Signed hexadecimal double-precision floating-point value that has the form [-]0xh.hhhhdd, where h.hhhh are the hex digits (using lower case letters) of the mantissa, and dd are one or more digits for the exponent. Точность определяет количество цифр после запятой.The precision specifies the number of digits after the point.
A С плавающей запятойFloating-point Шестнадцатеричное значение двойной точности с плавающей запятой, имеющее форму [-] 0xh. hhhhP ± dd , где h. hhhh — шестнадцатеричные цифры (с использованием прописных букв) мантисса, а дд — одна или несколько цифр для экспоненты.Signed hexadecimal double-precision floating-point value that has the form [-]0Xh.hhhhdd, where h.hhhh are the hex digits (using capital letters) of the mantissa, and dd are one or more digits for the exponent. Точность определяет количество цифр после запятой.The precision specifies the number of digits after the point.
n Указатель на целое числоPointer to integer Число символов, которые успешно записаны на данный момент в поток или буфер.Number of characters that are successfully written so far to the stream or buffer. Это значение хранится в целом числе, адрес которого указан в качестве аргумента.This value is stored in the integer whose address is given as the argument. Размер целочисленного значения, на которое ссылается указатель, управляется префиксом спецификации размера аргумента.The size of the integer pointed at can be controlled by an argument size specification prefix. n Описатель отключен по умолчанию. Дополнительные сведения см. в статье важное замечание по безопасности.The n specifier is disabled by default; for information see the important security note.
p Тип указателяPointer type Отображение аргумента в виде адреса в шестнадцатеричных цифрах.Display the argument as an address in hexadecimal digits.
s СтрокаString При использовании с функциями printf определяет строку однобайтовых или многобайтовых символов; при использовании с функциями wprintf определяет строку расширенных символов.When used with printf functions, specifies a single-byte or multi-byte character string; when used with wprintf functions, specifies a wide-character string. Символы отображаются до первого нулевого символа или до тех пор, пока не будет достигнуто значение precision.Characters are displayed up to the first null character or until the precision value is reached.
S СтрокаString При использовании с функциями printf определяет строку расширенных символов; при использовании с функциями wprintf определяет строку однобайтовых или многобайтовых символов.When used with printf functions, specifies a wide-character string; when used with wprintf functions, specifies a single-byte or multi-byte character string. Символы отображаются до первого нулевого символа или до тех пор, пока не будет достигнуто значение precision.Characters are displayed up to the first null character or until the precision value is reached.
Z Структура ANSI_STRING или UNICODE_STRINGANSI_STRING or UNICODE_STRING structure Если адрес ANSI_STRING UNICODE_STRING структуры или передается в качестве аргумента, отобразите строку, содержащуюся в буфере, на который указывает Buffer поле структуры.When the address of an ANSI_STRING or UNICODE_STRING structure is passed as the argument, display the string contained in the buffer pointed to by the Buffer field of the structure. Используйте префикс модификатора размера w для, чтобы указать аргумент, например UNICODE_STRING %wZ .Use a size modifier prefix of w to specify a UNICODE_STRING argument—for example, %wZ. Поле Length структуры должно содержать значение длины строки в байтах.The Length field of the structure must be set to the length, in bytes, of the string. Поле MaximumLength структуры должно содержать значение длины буфера в байтах.The MaximumLength field of the structure must be set to the length, in bytes, of the buffer.

Как правило, Z символ типа используется только в отладочных функциях драйвера, использующих спецификацию преобразования, например dbgPrint и kdPrint .Typically, the Z type character is used only in driver debugging functions that use a conversion specification, such as dbgPrint and kdPrint.

Начиная с Visual Studio 2015, если аргумент, соответствующий спецификатору преобразования с плавающей запятой ( a ,,,,,, A e E f F g , G ) имеет бесконечную, неопределенное или NaN, отформатированные выходные данные соответствуют стандарту C99.Starting in Visual Studio 2015, if the argument that corresponds to a floating-point conversion specifier (a, A, e, E, f, F, g, G) is infinite, indefinite, or NaN, the formatted output conforms to the C99 standard. В этой таблице перечислены форматированные выходные данные.This table lists the formatted output:

ЗначениеValue Выходные данныеOutput
infinityinfinity inf
Несигнальное значение NaNQuiet NaN nan
Сигнальное значение NaNSignaling NaN nan(snan)
Неопределенное значение NaNIndefinite NaN nan(ind)

Любое из этих значение может иметь префикс в виде знака.Any of these values may be prefixed by a sign. Если символ описателя преобразования type с плавающей запятой является прописной буквой, выходные данные форматируются также прописными буквами.If a floating-point type conversion specifier character is a capital letter, then the output is also formatted in capital letters. Например, если спецификатором формата является %F вместо %f, бесконечность форматируется как INF вместо inf.For example, if the format specifier is %F instead of %f, an infinity is formatted as INF instead of inf. Функции scanf также могут анализировать эти строки, поэтому эти значения могут совершать круговой путь через функции printf и scanf.The scanf functions can also parse these strings, so these values can make a round trip through printf and scanf functions.

До выхода Visual Studio 2015 в среде CRT использовался другой нестандартный формат для выходных данных значений бесконечности, неопределенных значений и значений NaN.Before Visual Studio 2015, the CRT used a different, non-standard format for output of infinite, indefinite, and NaN values:

ЗначениеValue Выходные данныеOutput
+ бесконечность+ infinity 1.#INF случайные цифры1.#INF random-digits
- infinity- infinity -1.#INF случайные цифры-1.#INF random-digits
Неопределенное (то же, что и не число без вызова исключения)Indefinite (same as quiet NaN) цифра .#IND случайные цифрыdigit .#IND random-digits
не числоNaN цифра .#NAN случайные цифрыdigit .#NAN random-digits

Любое из них могло быть предваряться знаком и может быть отформатировано по-разному в зависимости от ширины и точности поля, иногда с ненеобычными эффектами.Any of these may have been prefixed by a sign, and may have been formatted differently depending on field width and precision, sometimes with unusual effects. Например, printf("%.2f\n", INFINITY) печатается, 1.#J так как #INF будет "округляться" до двух цифр точности.For example, printf("%.2f\n", INFINITY) prints 1.#J because the #INF would be "rounded" to two digits of precision.

Примечание

Если аргумент, который соответствует %s или %S, или поле Buffer аргумента, который соответствует %Z, является указателем NULL, отображается значение "(NULL)".If the argument that corresponds to %s or %S, or the Buffer field of the argument that corresponds to %Z, is a null pointer, "(null)" is displayed.

Примечание

Во всех экспоненциальных форматах минимальное отображаемое количество цифр показателя степени по умолчанию равно двум (три используются только при необходимости).In all exponential formats, the minimum number of digits of exponent to display is two, using three only if necessary. С помощью _set_output_format функции можно задать число цифр, отображаемых в трех, для обеспечения обратной совместимости с кодом, написанным для Visual Studio 2013 и более.By using the _set_output_format function, you can set the number of digits displayed to three for backward compatibility with code written for Visual Studio 2013 and before.

Важно!

Так как %n Формат по своей природе небезопасен, он по умолчанию отключен.Because the %n format is inherently insecure, it's disabled by default. Если в строке формата имеется символ %n, вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров.If %n is encountered in a format string, the invalid parameter handler is invoked, as described in Parameter Validation. Сведения о включении %n поддержки см. в разделе _set_printf_count_output .To enable %n support, see _set_printf_count_output.

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

Первое необязательное поле в спецификации преобразования содержит директивы флагов, ни одного или несколько символов флага, указывающих выравнивание выходных данных и управляющих выводом символов, пустых значений, начальных нулей, десятичных запятых и восьмеричных и шестнадцатеричных префиксов.The first optional field in a conversion specification contains flag directives, zero or more flag characters that specify output justification and control output of signs, blanks, leading zeros, decimal points, and octal and hexadecimal prefixes. В спецификации преобразования может быть указано несколько директив флагов, и символы флагов могут размещаться в любом порядке.More than one flag directive may appear in a conversion specification, and the flag characters can appear in any order.

Символы флаговFlag characters

ФлагFlag ЗначениеMeaning Значение по умолчаниюDefault
- Выравнивание результата по левому краю в пределах заданной ширины поля.Left align the result within the given field width. Выравнивание по правому краю.Right align.
+ Используйте знак (+ или-), чтобы добавить в качестве префикса выходное значение, если оно имеет тип со знаком.Use a sign (+ or -) to prefix the output value if it's of a signed type. Знак отображается только для отрицательных значений со знаком –.Sign appears only for negative signed values (-).
0 Если параметр Width имеет префикс 0 , то добавляются начальные нули до тех пор, пока не будет достигнута минимальная ширина.If width is prefixed by 0, leading zeros are added until the minimum width is reached. Если оба 0 и - отображаются, параметр 0 игнорируется.If both 0 and - appear, the 0 is ignored. Если параметр 0 указан для целочисленного формата ( i , u , x , X , o , d ), а также имеется спецификация точности (например,), %04.d то параметр 0 игнорируется.If 0 is specified for an integer format (i, u, x, X, o, d) and a precision specification is also present—for example, %04.d—the 0 is ignored. Если 0 для a A формата с плавающей запятой задано значение, начальные нули добавляются к мантисса после 0x 0X префикса или.If 0 is specified for the a or A floating-point format, leading zeros are prepended to the mantissa, after the 0x or 0X prefix. Без заполнения.No padding.
пусто ("")blank (' ') Используйте пустое поле, чтобы добавить в качестве префикса выходное значение, если оно подписано и положительно.Use a blank to prefix the output value if it's signed and positive. Пустой префикс игнорируется, если одновременно с ним присутствует флаг +.The blank is ignored if both the blank and + flags appear. Пустой префикс не отображается.No blank appears.
# Если он используется с o x форматом,, или, X то # флаг использует 0 , 0x или 0X , соответственно, для префикса любого ненулевого выходного значения.When it's used with the o, x, or X format, the # flag uses 0, 0x, or 0X, respectively, to prefix any nonzero output value. Пустой префикс не отображается.No blank appears.
Если он используется с e E форматом,, f ,, или, F a A то # флаг заставляет выходное значение содержать десятичную запятую.When it's used with the e, E, f, F, a, or A format, the # flag forces the output value to contain a decimal point. Десятичный разделитель появляется, только если после него есть цифры.Decimal point appears only if digits follow it.
Когда он используется с g G форматом или, # флаг заставляет выходное значение содержать десятичную запятую и не допустить усечения конечных нулей.When it's used with the g or G format, the # flag forces the output value to contain a decimal point and prevents the truncation of trailing zeros.

Игнорируется при использовании с c , d , i , u или s .Ignored when used with c, d, i, u, or s.
Десятичный разделитель появляется, только если после него есть цифры.Decimal point appears only if digits follow it. Конечные нули отбрасываются.Trailing zeros are truncated.

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

В спецификации преобразования необязательное поле спецификации ширины отображается после любых символов флага.In a conversion specification, the optional width specification field appears after any flags characters. width Аргумент представляет собой Неотрицательное десятичное целое число, которое управляет минимальным числом выводимых символов.The width argument is a non-negative decimal integer that controls the minimum number of characters that are output. Если число символов в выходном значении меньше указанной ширины, то слева или справа от значений добавляются пробелы, в зависимости от того, задан ли флаг выравнивания влево ( - ), до тех пор, пока не будет достигнута минимальная ширина.If the number of characters in the output value is less than the specified width, blanks are added to the left or the right of the values—depending on whether the left-alignment flag (-) is specified—until the minimum width is reached. Если параметр width имеет префикс 0, ведущие нули добавляются к целому числу или преобразованиям с плавающей запятой до тех пор, пока не будет достигнута минимальная ширина, за исключением случаев, когда преобразование выполняется в бесконечное значение или NaN .If width is prefixed by 0, leading zeros are added to integer or floating-point conversions until the minimum width is reached, except when conversion is to an infinity or NaN.

Спецификация ширины никогда не вызывает усечения значения.The width specification never causes a value to be truncated. Если число символов в выходном значении больше указанной ширины или width значение не указано, все символы значения будут выводиться в соответствии со спецификацией точности.If the number of characters in the output value is greater than the specified width, or if width isn't provided, all characters of the value are output, subject to the precision specification.

Если в качестве спецификации ширины указана звездочка (*), значение ширины задается аргументом int из списка аргументов.If the width specification is an asterisk (*), an int argument from the argument list supplies the value. width Аргумент должен предшествовать значению, которое отформатировано в списке аргументов, как показано в следующем примере:The width argument must precede the value that's being formatted in the argument list, as shown in this example:

printf("%0*d", 5, 3); /* 00003 is output */

Отсутствующее или маленькое width значение в спецификации преобразования не приводит к усечению выходного значения.A missing or small width value in a conversion specification doesn't cause the truncation of an output value. Если результат преобразования шире width значения, поле расширяется и содержит результат преобразования.If the result of a conversion is wider than the width value, the field expands to contain the conversion result.

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

В спецификации преобразования третье необязательное поле является спецификацией точности.In a conversion specification, the third optional field is the precision specification. Он состоит из точки ( . ), за которой следует Неотрицательное десятичное целое число, которое в зависимости от типа конвертации указывает число символов строки, число десятичных разрядов или число значащих цифр для вывода.It consists of a period (.) followed by a non-negative decimal integer that, depending on the conversion type, specifies the number of string characters, the number of decimal places, or the number of significant digits to be output.

В отличие от спецификации ширины, спецификация точности может вызывать либо усечение выходного значения, либо округление значения с плавающей запятой.Unlike the width specification, the precision specification can cause either truncation of the output value or rounding of a floating-point value. Если параметр precision имеет значение 0, а преобразуемые данные равны 0, результат не будет содержать символы, как показано в следующем примере:If precision is specified as 0, and the value to be converted is 0, the result is no characters output, as shown in this example:

printf( "%.0d", 0 ); /* No characters output */

Если спецификация точности представляет собой звездочку (*), аргумент int из списка аргументов предоставляет значение.If the precision specification is an asterisk (*), an int argument from the argument list supplies the value. В списке аргументов precision аргумент должен предшествовать отформатированному значению, как показано в следующем примере:In the argument list, the precision argument must precede the value that's being formatted, as shown in this example:

printf( "%.*f", 3, 3.14159265 ); /* 3.142 output */

type Символ определяет либо интерпретацию, precision либо точность по умолчанию precision , если аргумент не указан, как показано в следующей таблице.The type character determines either the interpretation of precision or the default precision when precision is omitted, as shown in the following table.

Влияние значений точности на типHow Precision Values Affect Type

ТипType ЗначениеMeaning Значение по умолчаниюDefault
a, Aa, A Точность определяет количество цифр после запятой.The precision specifies the number of digits after the point. Точность по умолчанию — 13.Default precision is 13. Если точность равна 0, то десятичная запятая не печатается, если не # используется флаг.If precision is 0, no decimal point is printed unless the # flag is used.
c, Cc, C Точность не применяется.The precision has no effect. Символ выводится.Character is printed.
d, i, o, u, x, Xd, i, o, u, x, X Точность определяет минимальное выводимое количество цифр.The precision specifies the minimum number of digits to be printed. Если количество цифр в аргументе меньше значения precision, выходное значение дополняется слева нулями.If the number of digits in the argument is less than precision, the output value is padded on the left with zeros. Значение не усекается, если число цифр превышает точность.The value isn't truncated when the number of digits exceeds precision. Точность по умолчанию — 1.Default precision is 1.
e, Ee, E Выводимое количество знаков дробной части задается спецификацией точности.The precision specifies the number of digits to be printed after the decimal point. Последняя выводимая цифра округляется.The last printed digit is rounded. Точность по умолчанию — 6.Default precision is 6. Если точность равна 0 или точка ( . ) отображается без номера, то десятичная запятая не печатается.If precision is 0 or the period (.) appears without a number following it, no decimal point is printed.
f, Ff, F Значение точности задает количество цифр после десятичной запятой.The precision value specifies the number of digits after the decimal point. Если десятичная запятая присутствует, перед ней присутствует по крайней мере одна цифра.If a decimal point appears, at least one digit appears before it. Значение округляется до соответствующего количества цифр.The value is rounded to the appropriate number of digits. Точность по умолчанию — 6.Default precision is 6. Если точность равна 0 или если точка ( . ) отображается без числа после него, десятичная запятая не печатается.If precision is 0, or if the period (.) appears without a number following it, no decimal point is printed.
g, Gg, G Точность определяет максимальное выводимое количество значащих цифр.The precision specifies the maximum number of significant digits printed. Выводятся шесть значащих цифр, а конечные нули усекаются.Six significant digits are printed, and any trailing zeros are truncated.
s, Ss, S Точность определяет максимальное количество выводимых символов.The precision specifies the maximum number of characters to be printed. Символы, выходящие за рамки precision, не выводятся.Characters in excess of precision aren't printed. Символы выводятся до тех пор, пока не будет найден символ null.Characters are printed until a null character is found.

Спецификация размера аргументаArgument size specification

В спецификации преобразования поле size — это модификатор длины аргумента для описателя преобразования type.In a conversion specification, the size field is an argument length modifier for the type conversion specifier. Префиксы полей размера для поля типа —,, hh , h j l (строчные буквы L),,,,, L ll t w z , I (прописные i), I32 и I64 — Укажите размер соответствующего аргумента — длинный или короткий, 32-разрядный или 64-разрядный, однобайтовый или расширенный символ — в зависимости от описателя преобразования, который они изменяют.The size field prefixes to the type field—hh, h, j, l (lowercase L), L, ll, t, w, z, I (uppercase i), I32, and I64—specify the "size" of the corresponding argument—long or short, 32-bit or 64-bit, single-byte character or wide character—depending on the conversion specifier that they modify. Эти префиксы размера используются с символами type в семействах функций printf и wprintf для определения интерпретации размеров аргументов, как показано в следующей таблице.These size prefixes are used with type characters in the printf and wprintf families of functions to specify the interpretation of argument sizes, as shown in the following table. Поле size является необязательным для некоторых типов аргументов.The size field is optional for some argument types. Если префикс размера не указан, модуль форматирования использует целые аргументы, например подписанные или не подписанные char, short, int, long и типы перечисления как 32-разрядные типы int, а аргументы float, double и long double с плавающей запятой используются как 64-разрядные типы double.When no size prefix is specified, the formatter consumes integer arguments—for example, signed or unsigned char, short, int, long, and enumeration types—as 32-bit int types, and float, double, and long double floating-point arguments are consumed as 64-bit double types. Такое поведение соответствует правилам повышения уровня аргументов по умолчанию для списков аргументов переменных.This behavior matches the default argument promotion rules for variable argument lists. Дополнительные сведения об акциях аргументов см. в разделе аргументы многоточия и по умолчанию в постфиксных выражениях.For more information about argument promotion, see Ellipsis and Default Arguments in Postfix expressions. В 32-разрядных и 64-разрядных системах спецификация преобразования для целочисленного аргумента 64-bit должна включать в себя префикс размера ll или I64 .On both 32-bit and 64-bit systems, the conversion specification of a 64-bit integer argument must include a size prefix of ll or I64. В противном случае поведение модуля форматирования не определено.Otherwise, the behavior of the formatter is undefined.

Некоторые типы имеют разный размер в 32-разрядном и 64-разрядном коде.Some types are different sizes in 32-bit and 64-bit code. Например, size_t на 32 бита длиннее в коде, скомпилированном для x86, и на 64 бита длиннее в коде, скомпилированном для x64.For example, size_t is 32 bits long in code compiled for x86, and 64 bits in code compiled for x64. Чтобы создать код форматирования для типов с переменным количеством байт, не зависящий от платформы, можно использовать модификатор размера аргумента с переменным количеством байт.To create platform-agnostic formatting code for variable-width types, you can use a variable-width argument size modifier. Вместо этого используйте 64-разрядный модификатор размера аргумента и явно додвигайте тип аргумента переменной ширины в 64 бит.Instead, use a 64-bit argument size modifier and explicitly promote the variable-width argument type to 64 bits. I Модификатор размера аргумента, зависящий от Майкрософт (в верхнем регистре), обрабатывает целочисленные аргументы переменной ширины, но j t z для переносимости рекомендуется использовать модификаторы для конкретного типа, и.The Microsoft-specific I (uppercase i) argument size modifier handles variable-width integer arguments, but we recommend the type-specific j, t, and z modifiers for portability.

Префиксы размера для описателей формата функций printf и wprintfSize Prefixes for printf and wprintf Format-Type Specifiers

Чтобы указатьTo specify Используемый префиксUse prefix Со спецификатором типаWith type specifier
char
unsigned char
hh d, i , o , u , x или Xd, i, o, u, x, or X
short int
short unsigned int
h d, i , o , u , x или Xd, i, o, u, x, or X
__int32
unsigned __int32
I32 d, i , o , u , x или Xd, i, o, u, x, or X
__int64
unsigned __int64
I64 d, i , o , u , x или Xd, i, o, u, x, or X
intmax_t
uintmax_t
j или I64j or I64 d, i , o , u , x или Xd, i, o, u, x, or X
long double l (строчная L) или Ll (lowercase L) or L a, A , e , E , f , F , g или Ga, A, e, E, f, F, g, or G
long int
long unsigned int
l (строчная L)l (lowercase L) d, i , o , u , x или Xd, i, o, u, x, or X
long long int
unsigned long long int
ll (все символы в нижнем регистре)ll (lowercase LL) d, i , o , u , x или Xd, i, o, u, x, or X
ptrdiff_t t или I (прописная i)t or I (uppercase i) d, i , o , u , x или Xd, i, o, u, x, or X
size_t z или I (прописная i)z or I (uppercase i) d, i , o , u , x или Xd, i, o, u, x, or X
Однобайтовый символSingle-byte character h c или Cc or C
Расширенный символWide character l (строчная L) или wl (lowercase L) or w c или Cc or C
Строка однобайтовых символовSingle-byte character string h s, S или Zs, S, or Z
Строка расширенных символовWide-character string l (строчная L) или wl (lowercase L) or w s, S или Zs, S, or Z

Типы ptrdiff_t и size_t являются __int32 или unsigned __int32 на 32-разрядных платформах и __int64 или unsigned __int64 на 64-разрядных платформах.The ptrdiff_t and size_t types are __int32 or unsigned __int32 on 32-bit platforms, and __int64 or unsigned __int64 on 64-bit platforms. I Префиксы (прописные i), j , t и z size имеют правильную ширину аргумента для платформы.The I (uppercase i), j, t, and z size prefixes take the correct argument width for the platform.

В Visual C++ хотя long double является отдельным типом, он имеет то же внутреннее представление, что и тип double.In Visual C++, although long double is a distinct type, it has the same internal representation as double.

hc hC Описатель типа или является синонимом c в printf функциях и C в wprintf функциях.An hc or hC type specifier is synonymous with c in printf functions and with C in wprintf functions. lc lC wc Описатель типа,, или wC является синонимом C в printf функциях и c в wprintf функциях.A lc, lC, wc, or wC type specifier is synonymous with C in printf functions and with c in wprintf functions. hs hS Описатель типа или является синонимом s в printf функциях и S в wprintf функциях.An hs or hS type specifier is synonymous with s in printf functions and with S in wprintf functions. ls lS ws Описатель типа,, или wS является синонимом S в printf функциях и s в wprintf функциях.An ls, lS, ws, or wS type specifier is synonymous with S in printf functions and with s in wprintf functions.

Примечание

Зависит от корпорации Майкрософт:Microsoft-specific:
I I32 I64 Префиксы модификатора размера аргумента (прописные i),, и, и w являются расширениями Майкрософт и не совместимы с ISO C.The I (uppercase i), I32, I64, and w argument size modifier prefixes are Microsoft extensions and are not ISO C-compatible. h Префикс при использовании с данными типа char и l префикс (строчная L) при использовании с данными типа double — расширения Майкрософт.The h prefix when it's used with data of type char and the l (lowercase L) prefix when it's used with data of type double are Microsoft extensions.

См. также разделSee also

printf, _printf_l, wprintf, _wprintf_lprintf, _printf_l, wprintf, _wprintf_l
printf_s, _printf_s_l, wprintf_s, _wprintf_s_lprintf_s, _printf_s_l, wprintf_s, _wprintf_s_l
printf_p Параметры позиционированияprintf_p Positional Parameters