Freigeben über


printf_p-Positionsparameter

Positionelle Parameter bieten die Möglichkeit, von Zahl angeben, die der Argumente in ein Feld in einer Formatzeichenfolge ersetzt werden soll. Die folgenden printf-Funktionen des Positionsparameters sind verfügbar:

Angeben von positionaler Parameter

Parameter-Indizierung

Standardmäßig verhalten sich die Positionsfunktionen identisch zur Position keiner, wenn keine Positionsformatierung vorhanden ist. Positionelle Parameter angegeben im Format "%m$x", wobei m eine numerische Ordinalzahl gekennzeichnet, die der Position des Parameters in der Liste der Parameter angibt und Wechseln der Formatzeichenfolge vorangestellt und x bezeichnet den Typfeld-Schrifttyp, der in der printf-Funktion angegeben wird. Die Parameter in der Liste sind indiziertes usw. starten am Wert 1 für das erste Element in der Liste. Weitere Informationen hinsichtlich der Typfeldzeichen, finden Sie unter printf-Typenfeldzeichen.

Ein Beispiel für dieses Verhalten:

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

gibt

November 10

Die Reihenfolge der Zahlen, die verwendet werden, muss, nicht die Reihenfolge der Argumente angegebenen entspricht. Folgendes ist also gültig:

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

gibt

10 November

Parameter wird mehrmals beim Formatieren, anders als in traditionellen Formatzeichenfolgen, sodass verwendet werden

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

gibt

10 times 10 is 100

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

Die maximale Anzahl der positionelle Parameter, die in einer Formatzeichenfolge werden können, wird durch _ARGMAX angegeben.

Breite und Prognose

Wenn das * " wird verwendet, um anzugeben, dass die Breite und die Genauigkeit von einem Argument bestimmt werden soll, muss die Position der Breite oder des Vorhersagenwerts direkt nach werden * ". Beispiel:

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

oder

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

Kombinieren positional und Positionsargumente nicht

Positionelle Parameter dürfen nicht mit nicht-Positionsparametern in der gleichen Formatzeichenfolge kombiniert werden. Sowohl printf_s und verwandte Funktionen noch nicht-Positionsparameter 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-Typenfeldzeichen

printf-Breitenangabe

Genauigkeitsangabe