printf_p 위치 매개 변수
위치 매개변수는 형식 문자열에서 필드로 대신하는 매개변수의 번호로 지정하기 위한 기능을 제공합니다. 다음 위치에 대한 매개변수 printf 함수 사용할 수 있습니다.
printf, _printf_l, wprintf, _wprintf_l
_printf_p, _printf_p_l, _wprintf_p, _wprintf_p_lsprintf, _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_lfprintf, _fprintf_l, fwprintf, _fwprintf_l
_fprintf_p, _fprintf_p_l, _fwprintf_p, _fwprintf_p_lvprintf, _vprintf_l, vwprintf, _vwprintf_l
_vprintf_p, _vprintf_p_l, _vwprintf_p, _vwprintf_p_lvfprintf, _vfprintf_l, vfwprintf, _vfwprintf_l
_vfprintf_p, _vfprintf_p_l, _vfwprintf_p, _vfwprintf_p_lvsprintf, _vsprintf_l, vswprintf, _vswprintf_l, __vswprintf_l
_vsprintf_p, _vsprintf_p_l, _vswprintf_p, _vswprintf_p_l
위치 매개변수를 지정합니다.
인덱싱 매개변수
기본적으로, 만일 위치에 대한 형식이 있는 경우, 위치 함수는 위치에 대한 정보가 없는 것과 동일하게 동작합니다. 위치 매개 변수는 "%m$x"형식을 사용하여 지정되고, m 는 매개변수의 목록에서 매개변수의 위치를 나타내는 서수 번호를 의미하고, 선행되는 형식 문자열와 x 는 printf 함수에서 지정된 형식 필드 문자를 의미합니다. 목록등에서 첫번째 원소에 대한 값 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_s 와 관련된 함수는 여전히 비 위치 매개변수를 포함하는 서식 매개변수에서 비 위치 매개변수를 지원합니다.
예제
// 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);
}