printf_p位置参数

位置参数可以由参数将被替换为在格式字符串中的字段数指定。 以下位置的参数 printf 功能可用:

指定位置参数

bt7tawza.collapse_all(zh-cn,VS.110).gif参数索引

默认情况下,如果此位置的格式不存在,位置的函数方法的行为与该非位置部分。 使用格式 “%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以格式字符串允许的位置参数的最大数目。

bt7tawza.collapse_all(zh-cn,VS.110).gif宽度和预感

当 * 符号用于指定宽度或精度是从参数被认为,然后宽度或预感值的位置必须位于之后 * 符号。 例如,

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

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

bt7tawza.collapse_all(zh-cn,VS.110).gif组合位置和非位置参数

位置参数不能与同一格式字符串的非位置参数组合。 但是, 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宽度规范

精度规范