printf_p 위치 매개 변수

 

Visual Studio 2017 에 대한 최신 설명서는 Visual Studio 2017 설명서를 참조하세요.

위치 매개 변수를 사용하면 형식 문자열의 필드로 대체되는 인수의 기준 숫자를 지정할 수 있습니다. 다음 위치 매개 변수 printf 함수를 사용할 수 있습니다.

printf, _printf_l, wprintf, _wprintf_l
_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_l

sprintf, _sprintf_l, swprintf, _swprintf_l, __swprintf_l
_sprintf_p, _sprintf_p_l, _swprintf_p, _swprintf_p_l

_cprintf, _cprintf_l, _cwprintf, _cwprintf_l
_cprintf_p, _cprintf_p_l, _cwprintf_p, _cwprintf_p_l

fprintf, _fprintf_l, fwprintf, _fwprintf_l
_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_l

vprintf, _vprintf_l, vwprintf, _vwprintf_l
_vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_l

vfprintf, _vfprintf_l, vfwprintf, _vfwprintf_l
_vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_l

vsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l
_vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l

매개 변수 인덱스

기본적으로 위치 함수는 위치 서식이 없는 경우 위치 매개 변수가 아닌 매개 변수와 동일하게 동작합니다. 위치 매개 변수는 "%m$x" 형식으로 지정됩니다. 여기서 m은 매개 변수 목록에서 서식 문자열에 선행하는 매개 변수의 위치를 나타내는 서수이고 xprintf 함수에 지정된 형식 필드 문자 유형을 나타냅니다. 목록의 매개 변수는 목록의 첫 번째 요소에 해당하는 값 1에서 시작됩니다. 형식 필드 문자에 관한 추가 정보는 printf 형식 필드 문자를 참조하세요.

이 동작의 예:

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

가 인쇄됩니다.

November 10  

사용되는 숫자의 순서는 지정된 인수의 순서와 일치할 필요가 없습니다. 따라서 다음이 유효합니다.

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

가 인쇄됩니다.

10 November  

기존의 형식 문자열과 달리 서식 지정 중 매개 변수가 한 번 이상 사용될 수 있습니다. 따라서

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

가 인쇄됩니다.

10 times 10 is 100  

모든 인수를 형식 문자열에서 한 번 이상 사용해야 합니다.

형식 문자열에 허용되는 위치 매개 변수의 최대 수는 _ARGMAX로 지정합니다.

너비 및 정밀도

인수에서 너비 또는 정밀도를 확인할지 지정하는 데 * 기호가 사용되는 경우 너비 및 정밀도 값의 위치가 * 기호 뒤에 바로 표시되어야 합니다. 예를 들면 다음과 같습니다.

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

또는

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

위치 인수 및 비 위치 인수 혼합

위치 매개 변수는 동일한 형식 문자열에서 비 위치 매개 변수와 함께 혼합할 수 없습니다. 그러나 printf_p 및 관련 함수는 비 위치 매개 변수를 포함하는 형식 문자열에서 계속해서 비 위치 매개 변수를 지합니다.

// 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 argc, char *argv[])  
{  
    int     i = 1,  
            j = 2,  
            k = 3;  
    double  x = 0.1,  
            y = 0.2,  
            z = 0.3;  
    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 args are numbers indicating the  
    // argument enclosed in curly braces.  
    _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);  
  
    _printf_p("%1$s %2$s %3$s\n", s1, s2, s3);  
  
    _printf_p("%3$s %1$s %2$s\n", s1, s2, s3);  
}  

1 2 3
3 1 2
1 2 1
abc def ghi
ghi abc def

printf 형식 필드 문자
printf 너비 사양
전체 자릿수 사양

표시: