형식 사양 구문: printf 및 wprintf 함수Format specification syntax: printf and wprintf functions

다양한 printfwprintf 함수는 형식 문자열 및 선택적 인수를 사용하고 출력에 대해 형식이 지정된 시퀀스를 생성합니다.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 topic describes the syntax used to encode conversion specifications in the format string. 이러한 함수의 목록을 보려면 스트림 I/O를 참조하세요.For a listing of these functions, see Stream I/O.

다음 양식에서 변환 사양은 선택적 필드 및 필수 필드로 이루어져 있습니다.A conversion specification consists of optional and required fields in this form:

%[flags][width][.precision][size]type%[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, widthprecision 필드는 선행 공백 또는 0, 양쪽 맞춤 및 표시되는 전체 자릿수와 같은 추가 형식 요소를 제어합니다.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.

기본 변환 사양에는 백분율 기호와 형식 문자만 포함됩니다.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 );

형식 변환 지정자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. 형식 문자는 유일하게 요구되는 변환 사양 필드이며 선택적 필드 뒤에 표시됩니다.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. 문자 형식 charwchar_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. cs를 사용하여 지정된 문자 및 문자열 인수는 printf 패밀리 함수에서는 charchar*로 해석되고 wprintf 패밀리 함수에서는 wchar_twchar_t*로 해석됩니다.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. CS를 사용하여 지정된 문자 및 문자열 인수는 printf 패밀리 함수에서는 wchar_twchar_t*로 해석되고 wprintf 패밀리 함수에서는 charchar*로 해석됩니다.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, xX를 사용하여 지정됩니다. float, double, long double 등의 부동 소수점 형식은 a, A, e, E, f, F, gG를 사용하여 지정됩니다. size 접두사에 의해 수정되지 않는 한, 기본적으로 정수 인수는 int 형식으로 강제 변환되고 부동 소수점 인수는 double로 강제 변환됩니다.Integer types such as short, int, long, long long, and their unsigned variants, are specified by using d, i, o, u, x, and X. Floating-point types such as float, double, and long double, are specified by using a, A, e, E, f, F, g, and G. By default, unless they are modified by a size prefix, integer arguments are coerced to int type, and floating-point arguments are coerced to double. 64비트 시스템에서, int는 32비트 값이므로 ll 또는 I64size 접두사가 사용되지 않는 경우 64비트 정수는 출력을 위해 형식이 지정될 때 잘립니다.On 64-bit systems, an int is a 32-bit value; therefore, 64-bit integers will be truncated when they are 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 전용Microsoft Specific
Z 형식 문자와 c, C, sS 형식 문자가 printfwprintf 함수와 함께 사용될 때의 동작은 Microsoft 확장입니다.The Z type character, and the behavior of the c, C, s, and S type characters when they are used with the printf and wprintf functions, are Microsoft extensions. ISO C 표준에서는 모든 형식 지정 함수에서 반각 문자 및 문자열에 대해 일관되게 cs를 사용하고 와이드 문자 및 문자열에 대해 CS를 사용합니다.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
cc 문자Character printf 함수와 함께 사용될 때 단일 바이트 문자를 지정하고, wprintf 함수와 함께 사용될 때 와이드 문자를 지정합니다.When used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.
CC 문자Character printf 함수와 함께 사용될 때 와이드 문자를 지정하고, wprintf 함수와 함께 사용될 때 단일 바이트 문자를 지정합니다.When used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character.
dd 정수Integer 부호 있는 10진수 정수입니다.Signed decimal integer.
ii 정수Integer 부호 있는 10진수 정수입니다.Signed decimal integer.
oo 정수Integer 부호 없는 8진수 정수입니다.Unsigned octal integer.
uu 정수Integer 부호 없는 10진수 정수.Unsigned decimal integer.
xx 정수Integer 부호 없는 16진수 정수이며 "abcdef"를 사용합니다.Unsigned hexadecimal integer; uses "abcdef."
XX 정수Integer 부호 없는 16진수 정수이며 "ABCDEF"를 사용합니다.Unsigned hexadecimal integer; uses "ABCDEF."
ee 부동 소수점Floating-point 부호 있는 값으로서 형식은 [–]d.dddddd[d]입니다. 여기서 d는 하나의 10진수이고 dddd는 지정된 전체 자릿수에 따라 하나 이상의 10진수이거나 기본적으로 6 자릿수입니다. dd[d]는 출력 형식 및 지수 크기에 따라 두 개 또는 세 개의 10진수입니다.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.
EE 부동 소수점Floating-point e가 아니라 E가 지수를 도입한다는 점을 제외하고는 e 형식과 동일합니다.Identical to the e format except that E rather than e introduces the exponent.
ff 부동 소수점Floating-point 형식이 [–]dddd.dddd인 부호 있는 값입니다. 여기서 dddd는 하나 이상의 10진수입니다.Signed value that has the form [-]dddd.dddd, where dddd is one or more decimal digits. 소수점 앞의 자릿수는 수의 크기에 따라 다르며, 소수점 뒤의 자릿수는 요청된 전체 자릿수에 따라 다릅니다. 기본 자릿수는 6입니다.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.
FF 부동 소수점Floating-point 무한대 및 NAN 출력이 대문자로 표시되는 점을 제외하고 f 형식과 동일합니다.Identical to the f format except that infinity and nan output is capitalized.
gg 부동 소수점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보다 작거나 precision 인수보다 크거나 같을 때만 사용됩니다.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. 뒤에 나오는 0은 잘리고, 소수점은 뒤에 하나 이상의 수가 나오는 경우에만 나타납니다.Trailing zeros are truncated, and the decimal point appears only if one or more digits follow it.
GG 부동 소수점Floating-point e가 아니라 E가 지수를 도입(해당하는 경우)한다는 점을 제외하고는 g 형식과 동일합니다.Identical to the g format, except that E, rather than e, introduces the exponent (where appropriate).
aa 부동 소수점Floating-point 형식이 [−]0xh.hhhhdd인 부호 있는 16진수 배정밀도 부동 소수점 값입니다. 여기서 h.hhhh는 가수의 16진수(소문자 사용)이며 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.
AA 부동 소수점Floating-point 형식이 [−]0Xh.hhhhdd인 부호 있는 16진수 배정밀도 부동 소수점 값입니다. 여기서 h.hhhh는 가수의 16진수(대문자 사용)이며 dd는 지수의 하나 이상의 숫자입니다.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 to can be controlled by an argument size specification prefix. n 지정자는 기본적으로 사용되지 않습니다. 자세한 내용은 중요 보안 정보를 참조하세요.The n specifier is disabled by default; for information see the important security note.
pp 포인터 유형Pointer type 인수를 16진수로 된 주소로 표시합니다.Displays the argument as an address in hexadecimal digits.
ss 문자열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. 첫 번째 null 문자 직전까지 또는 precision 값에 도달할 때까지 문자가 표시됩니다.Characters are displayed up to the first null character or until the precision value is reached.
SS 문자열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. 첫 번째 null 문자 직전까지 또는 precision 값에 도달할 때까지 문자가 표시됩니다.Characters are displayed up to the first null character or until the precision value is reached.
ZZ ANSI_STRING 또는 UNICODE_STRING 구조체ANSI_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, displays the string contained in the buffer pointed to by the Buffer field of the structure. wsize 한정자 접두사를 사용하여 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 형식 문자는 dbgPrintkdPrint 등의 변환 사양을 사용하는 드라이버 디버깅 함수에서만 사용됩니다.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
신호 NANSignalling 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 함수는 이러한 문자열을 구문 분석할 수 있으므로 이러한 값은 printfscanf 함수를 왕복할 수 있습니다.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 random-digits1.#INF random-digits
- 무한대- infinity -1.#INF random-digits-1.#INF random-digits
무한(자동 NaN과 같음)Indefinite (same as quiet NaN) digit .#IND random-digitsdigit .#IND random-digits
NaNNaN digit .#NAN random-digitsdigit .#NAN random-digits

이러한 문자열 앞에 부호가 추가될 수 있고, 때때로 비정상적인 효과와 함께 필드 너비 및 전체 자릿수에 따라 형식이 약간 다르게 지정되었을 수 있습니다.Any of these may have been prefixed by a sign, and may have been formatted slightly differently depending on field width and precision, sometimes with unusual effects. 예를 들어 #INF는 2 자릿수로 "반올림"되기 때문에 printf("%.2f\n", INFINITY)1.#J를 인쇄합니다.For example, printf("%.2f\n", INFINITY) would print 1.#J because the #INF would be "rounded" to a precision of 2 digits.

참고

%s 또는 %S에 해당하는 인수나 %Z에 해당하는 인수의 Buffer 필드가 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.

참고

모든 지수 형식에서 표시할 지수의 최소 자릿수는 2입니다. 필요한 경우에만 3을 사용합니다.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 이하용으로 작성된 코드와의 호환성을 위해 표시되는 자릿수를 3으로 설정할 수 있습니다.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 is 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

변환 사양의 첫 번째 선택적 필드에는 출력 양쪽 맞춤을 지정하고 기호, 공백, 선행 0, 소수점, 8진수 및 16진수 접두사의 출력을 제어하는 플래그 문자가 0개 이상인 플래그 지시문이 포함됩니다.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 is of a signed type. 부호 있는 음수 값(-)에 대해서만 기호가 표시됩니다.Sign appears only for negative signed values (-).
00 width0이 접두사로 붙은 경우, 최소 너비에 도달할 때까지 선행 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. 0a 또는 A 부동 소수점 형식에 대해 지정된 경우, 선행 0은 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 (' ')blank (' ') 부호 있는 양수 출력 값에는 공백을 접두사로 추가합니다.Use a blank to prefix the output value if it is signed and positive. 공백과 + 플래그가 모두 표시되는 경우 공백은 무시됩니다.The blank is ignored if both the blank and + flags appear. 공백이 표시되지 않습니다.No blank appears.
# # 플래그가 o, x 또는 X 형식과 함께 사용되는 경우 이 플래그는 0, 0x 또는 0X를 각각 사용하여 0이 아닌 모든 출력 값에 접두사를 추가합니다.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 형식과 함께 사용하는 경우 이 플래그는 출력 값이 소수점을 강제로 포함하도록 하고 후행 0이 잘리지 않도록 합니다.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. 후행 0이 잘립니다.Trailing zeros are truncated.

너비 사양Width specification

변환 사양에서 선택적인 너비 사양 필드는 flags 문자 뒤에 표시됩니다.In a conversion specification, the optional width specification field appears after any flags characters. width 인수는 출력 문자의 최소 개수를 제어하는 음수가 아닌 10진수 정수입니다.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인 경우를 제외하고 최소 너비에 도달할 때까지 정수 또는 부동 소수점 변환에 선행 0이 추가됩니다.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가 지정되지 않은 경우 precision 사양에 따라 값의 모든 문자가 출력됩니다.If the number of characters in the output value is greater than the specified width, or if width is not given, 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*f", 5, 3); /* 00003 is output */

변환 사양에서 width 값이 작거나 누락된 경우 출력 값이 잘리지 않습니다.A missing or small width value in a conversion specification does not 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. 이 필드의 내용은 마침표(.) 뒤에 음수가 아닌 10진수 정수가 붙는 형식으로 구성됩니다. 이 정수는 변환 유형에 따라 문자열 문자의 수, 소수점의 수 또는 출력할 유효 자릿수의 수를 지정합니다.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 미만이면 출력 값 왼쪽에 0이 채워집니다.If the number of digits in the argument is less than precision, the output value is padded on the left with zeros. 자릿수가 precision을 초과해도 값은 잘리지 않습니다.The value is not 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. precision이 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. precision이 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. 유효 자릿수 6개가 인쇄되며 후행 0은 잘립니다.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 are not printed. null 문자가 나타날 때까지 문자가 인쇄됩니다.Characters are printed until a null character is encountered.

인수 크기 사양Argument size specification

변환 사양에서 크기 필드는 형식 변환 지정자에 대한 인수 길이 한정자입니다.In a conversion specification, the size field is an argument length modifier for the type conversion specifier. type 필드에 대한 size 필드 접두사(hh, h, j, l(소문자 L), L, ll, t, w, z, I(대문자 i), I32I64)는 수정하는 변환 지정자에 따라 해당 인수의 "크기"(길거나 짧음, 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. 다음 표에 표시된 것처럼 이러한 크기 접두사는 printfwprintf 함수 패밀리에 type 문자와 함께 사용되어 인수 크기 해석을 지정합니다.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, doublelong 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 matches the default argument promotion rules for variable argument lists. 인수 승격에 대한 자세한 내용은 후위 식의 줄임표 및 기본 인수를 참조하세요.For more information about argument promotion, see Ellipses and Default Arguments in Postfix expressions. 32비트 및 64비트 시스템 모두에서 ll 또는 I64 크기 접두사가 64비트 정수 인수의 변환 사양에 포함되어야 합니다.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는 x86용으로 컴파일된 코드에서는 32비트 길이이며 x64용으로 컴파일된 코드에서는 64비트입니다.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비트로 승격합니다.Alternatively, use a 64-bit argument size modifier and explicitly promote the variable-width argument type to 64 bits. Microsoft 전용 I(대문자 i) 인수 크기 한정자는 가변 너비 정수 인수를 처리하지만, 이식성을 위해 형식별 j, tz 한정자를 사용하는 것이 좋습니다.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 및 wprintf 서식 형식 지정자에 대한 크기 접두사Size Prefixes for printf and wprintf Format-Type Specifiers

지정할 함수To specify 접두사 사용Use prefix 형식 지정자 사용With type specifier
char
unsigned char
hhhh d, i, o, u, x 또는 Xd, i, o, u, x, or X
short int
short unsigned int
hh d, i, o, u, x 또는 Xd, i, o, u, x, or X
__int32
unsigned __int32
I32I32 d, i, o, u, x 또는 Xd, i, o, u, x, or X
__int64
unsigned __int64
I64I64 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)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 hh c 또는 Cc or C
와이드 문자Wide character l(소문자 L) 또는 wl (lowercase L) or w c 또는 Cc or C
싱글바이트 문자열Single-byte character string hh s, S 또는 Zs, S, or Z
와이드 문자열Wide-character string l(소문자 L) 또는 wl (lowercase L) or w s, S 또는 Zs, S, or Z

ptrdiff_tsize_t 형식은 32비트 플랫폼에서는 __int32 또는 unsigned __int32이며 64비트 플랫폼에서는 __int64 또는 unsigned __int64입니다.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, tz 크기 접두사는 플랫폼에 대해 올바른 인수를 사용합니다.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 형식 지정자는 printf 함수의 cwprintf 함수의 C와 같습니다.An hc or hC type specifier is synonymous with c in printf functions and with C in wprintf functions. lc, lC, wc 또는 wC 형식 지정자는 printf 함수의 Cwprintf 함수의 c와 같습니다.An lc, lC, wc or wC type specifier is synonymous with C in printf functions and with c in wprintf functions. hs 또는 hS 형식 지정자는 printf 함수의 swprintf 함수의 S와 같습니다.An hs or hS type specifier is synonymous with s in printf functions and with S in wprintf functions. ls, lS, ws 또는 wS 형식 지정자는 printf 함수의 Swprintf 함수의 s와 같습니다.An ls, lS, ws or wS type specifier is synonymous with S in printf functions and with s in wprintf functions.

참고

Microsoft 전용Microsoft Specific
I(대문자 i), I32, I64w 인수 크기 한정자 접두사는 Microsoft 확장이며 ISO C와 호환되지 않습니다.The I (uppercase i), I32, I64, and w argument size modifier prefixes are Microsoft extensions and are not ISO C-compatible. char 형식의 데이터와 함께 사용되는 h 접두사 및 double 형식의 데이터와 함께 사용되는 l(소문자 L) 접두사는 Microsoft 확장입니다.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