printf_p 位置參數

位置參數提供引數何者為來取代在格式字串中的欄位中插入的數字以指定的能力。下列的位置參數printf可使用函數:

指定的位置參數

bt7tawza.collapse_all(zh-tw,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-tw,VS.110).gif寬度和 Prevision

當 * 符號用來指定 [寬度] 或 [整數位數是由引數,則寬度] 或 [prevision 值的位置應緊跟 * 符號。例如:

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

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

bt7tawza.collapse_all(zh-tw,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 寬度規格

精確規格