printf_p positionelle Parameter

Positionsgebundene Parameter angeben die Möglichkeit, um anzugeben, die Anzahl der Argumente in ein Feld in einer Formatzeichenfolge ersetzt werden soll.Die folgenden printf-Funktionen des positionsgebundenen Parameters sind verfügbar:

Positionsgebundene Parameter angeben

bt7tawza.collapse_all(de-de,VS.110).gifParameter-Indizierung

Standardmäßig verhalten sich nicht auf die positionale Funktionen identisch sein, wenn keine Position eine positionelle Formatierung vorhanden ist.Positionsgebundene Parameter werden mithilfe des angegebenen Formats „%m$x“, wobei m eine numerische Ordinalzahl bezeichnet, die die Position des Parameters in der Liste der Parameter angibt und fahren der Formatzeichenfolge voraus undx bezeichnet den Typ feld-Schrifttyp, der in der printf-Funktion angegeben wird.Die Parameter in der Liste sind indiziertes usw.) beginnen am Wert 1 für das erste Element in der Liste.Zusätzliche Informationen hinsichtlich der Zeichen im Feld Typ finden Sie unter printf-Typ-Feld-Zeichen.

Ein Beispiel für dieses Verhalten:

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

druckt

November 10

Die Reihenfolge der Zahlen, die verwendet werden muss, nicht die Reihenfolge der angegebenen Argumente übereinstimmt.Daher ist das nächste gültig:

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

druckt

10 November

Parameter kann mehrmals, wenn die Formatierung anders als in herkömmlichen Formatierungszeichenfolgen, damit verwendet werden.

_printf_p("%{1$d times %1$d is %2$d", 10, 100);

druckt

10 times 10 is 100

Allerdings müssen alle Argumente in der Formatzeichenfolge mindestens einmal verwendet werden.

Die maximale Anzahl von positionsgebundenen Parametern, die in einer Formatzeichenfolge zulässig sind, ist durch _ARGMAXangegeben.

bt7tawza.collapse_all(de-de,VS.110).gifVorhersage und Breite

Wenn das Symbol * wird verwendet, um anzugeben, dass die Breite oder die Genauigkeit von einem Argument bestimmt werden soll, muss die Position der Breite oder Vorhersagen für Symbol * werden unmittelbar folgt.Beispiel:

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

oder

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

bt7tawza.collapse_all(de-de,VS.110).gifKombinieren und Position nicht positionellen Argumente

Positionsgebundene Parameter nicht mit nicht-Positions Parametern in der gleichen Formatzeichenfolge kombiniert werden.printf_s und zugehörige Funktionen unterstützen jedoch noch nicht-Positions von Parametern in Formatzeichenfolgen, die keine Positionsparameter enthalten.

Beispiel

// 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);
}
  

Siehe auch

Referenz

printf-Typ-Feld-Zeichen

printf-Breitenangabe

Genauigkeits-Spezifikation