共用方式為


printf_p 位置參數

位置參數可讓您以引數要替代的格式字串的欄位數指定。 下列位置參數 printf 函式可用:

指定位置參數

參數索引

根據預設,如果位置格式化不存在,位置函式相同的行為與非位置部分。 使用格式「%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);
}
  

請參閱

參考

printf 類型欄位字元

printf 寬度規格

精確度規格