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 関数の型フィールド文字を参照してください。
この動作の例については、" Walkthrough:
_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);
}