次の方法で共有


printf_p の位置指定パラメーター

位置指定パラメーターに引数の書式指定文字列のフィールドに置き換える数指定できます。 位置指定パラメーターに printf の次の関数を使用する場合:

位置指定パラメーターの指定

パラメーター インデックス

既定で関数は、位置指定位置書式指定がない場合、位置と物以外の動作は同じです。 位置指定パラメーターは、書式指定文字列に先行する形式「%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);
}
  

参照

関連項目

printf 関数の型フィールド文字

printf 関数の文字幅指定

精度指定