printf_p 위치 매개 변수printf_p Positional Parameters

위치 매개 변수를 사용하면 형식 문자열의 필드로 대체되는 인수의 기준 숫자를 지정할 수 있습니다.Positional parameters provide the ability to specify by number which of the arguments is to be substituted into a field in a format string. 다음 위치 매개 변수 printf 함수를 사용할 수 있습니다.The following positional parameter printf functions are available:

비위치 printf 함수Non-positional printf functions 해당하는 위치 매개 변수Positional parameter equivalents
printf, _printf_l, wprintf, _wprintf_lprintf, _printf_l, wprintf, _wprintf_l _printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l
sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_lsprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l _sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l
_cprintf, _cprintf_l, _cwprintf, _cwprintf_l_cprintf, _cprintf_l, _cwprintf, _cwprintf_l _cprintf_p, _cprintf_p_l, _cwprintf_p, _cwprintf_p_l_cprintf_p, _cprintf_p_l, _cwprintf_p, _cwprintf_p_l
fprintf, _fprintf_l, fwprintf, _fwprintf_lfprintf, _fprintf_l, fwprintf, _fwprintf_l _fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l
vprintf, _vprintf_l, vwprintf, _vwprintf_lvprintf, _vprintf_l, vwprintf, _vwprintf_l _vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_l_vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_l
vfprintf, _vfprintf_l, vfwprintf, _vfwprintf_lvfprintf, _vfprintf_l, vfwprintf, _vfwprintf_l _vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_l_vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_l
vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_lvsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l _vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l_vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l

위치 매개 변수 지정 방법How to specify positional parameters

매개 변수 인덱스Parameter indexing

기본적으로 위치 형식이 없는 경우 위치 함수는 위치 매개 변수가 아닌 매개 변수와 동일하게 동작합니다.By default, if no positional formatting is present, the positional functions behave identically to the non-positional ones. 형식 지정자의 시작 부분에 있는 %n$를 사용하여 형식을 지정할 위치 매개 변수를 지정합니다. 여기서 n은 매개 변수 목록에서 형식을 지정할 매개 변수의 위치입니다.You specify the positional parameter to format by using %n$ at the beginning of the format specifier, where n is the position of the parameter to format in the parameter list. 매개 변수 위치는 형식 문자열 뒤에 나오는 첫 번째 인수부터 1로 지정됩니다.The parameter position starts at 1 for the first argument after the format string. 형식 지정자의 나머지 부분은 printf 형식 지정자와 동일한 규칙을 따릅니다.The remainder of the format specifier follows the same rules as the printf format specifier. 형식 지정자에 대한 자세한 내용은 형식 사양 구문: printf 및 wprintf 함수를 참조하세요.For more information about format specfiers, see Format Specification Syntax: printf and wprintf Functions.

위치 형식 지정의 예는 다음과 같습니다.Here's an example of positional formatting:

_printf_p("%1$s %2$s", "November", "10");  

다음이 출력됩니다.This prints:

November 10  

사용되는 숫자의 순서는 인수의 순서와 일치할 필요가 없습니다.The order of the numbers used doesn't need to match the order of the arguments. 예를 들어 다음은 유효한 형식 문자열입니다.For example, this is a valid format string:

_printf_p("%2$s %1$s", "November", "10");  

다음이 출력됩니다.This prints:

10 November  

기존의 형식 문자열과 달리, 위치 매개 변수는 한 형식 문자열에 두 번 이상 사용될 수 있습니다.Unlike traditional format strings, positional parameters may be used more than once in a format string. 예를 들면 다음과 같습니다.For example,

_printf_p("%1$d times %1$d is %2$d", 10, 100);  

다음이 출력됩니다.This prints:

10 times 10 is 100  

모든 인수를 형식 문자열에서 한 번 이상 사용해야 합니다.All arguments must be used at least once somewhere in the format string. 형식 문자열에 허용되는 위치 매개 변수의 최대 수는 _ARGMAX로 지정합니다.The maximum number of positional parameters allowed in a format string is given by _ARGMAX.

너비 및 전체 자릿수Width and precision

*n$를 사용하여 위치 매개 변수를 너비 또는 전체 자릿수로 지정할 수 있습니다. 여기서 n은 매개 변수 목록에서 너비 또는 전체 자릿수 매개 변수의 위치입니다.You can use *n$ to specify a positional parameter as a width or precision specifier, where n is the position of the width or precision parameter in the parameter list. 너비 또는 전체 자릿수 값의 위치는 * 기호 바로 다음에 나와야 합니다.The position of the width or precision value must appear immediately following the * symbol. 예를 들면 다음과 같습니다.For example,

_printf_p("%1$*2$s","Hello", 10);  

또는or

_printf_p("%2$*1$s", 10, "Hello");  

위치 인수 및 비위치 인수 혼합Mixing positional and non-positional arguments

위치 매개 변수는 동일한 형식 문자열에서 비 위치 매개 변수와 함께 혼합할 수 없습니다.Positional parameters may not be mixed with non-positional parameters in the same format string. 위치 형식이 사용되는 경우 모든 형식 지정자는 위치 서식을 사용해야 합니다.If any positional formatting is used, all format specifiers must use positional formatting. 그러나 printf_p 및 관련 함수는 비 위치 매개 변수를 포함하는 형식 문자열에서 계속해서 비 위치 매개 변수를 지합니다.However, printf_p and related functions still support non-positional parameters in format strings containing no positional parameters.

예제Example

// positional_args.c  
// Build by using: cl /W4 positional_args.c  
// Positional arguments allow the specification of the order  
// in which arguments are consumed in a formatting string.  

#include <stdio.h>  

int main()  
{  
    int     i = 1,  
            j = 2,  
            k = 3;  
    double  x = 0.1,  
            y = 2.22,  
            z = 333.3333;  
    char    *s1 = "abc",  
            *s2 = "def",  
            *s3 = "ghi";  

    // If positional arguments are unspecified,  
    // normal input order is used.  
    _printf_p("%d %d %d\n", i, j, k);  

    // Positional arguments are numbers followed by a $ character.  
    _printf_p("%3$d %1$d %2$d\n", i, j, k);  

    // The same positional argument may be reused.  
    _printf_p("%1$d %2$d %1$d\n", i, j);  

    // The positional arguments may appear in any order.
    _printf_p("%1$s %2$s %3$s\n", s1, s2, s3);  
    _printf_p("%3$s %1$s %2$s\n", s1, s2, s3);  

    // Precision and width specifiers must be int types.  
    _printf_p("%3$*5$f %2$.*4$f %1$*4$.*5$f\n", x, y, z, j, k);  
}  
1 2 3
3 1 2
1 2 1
abc def ghi
ghi abc def
333.333300 2.22 0.100

참고 항목See Also

형식 사양 구문: printf 및 wprintf 함수Format Specification Syntax: printf and wprintf Functions