Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mithilfe von Positionsparametern können Sie das Argument angeben, das in einem Feld in einer Formatzeichenfolge ersetzt werden soll. Die folgenden printf
-Positionsparameterfunktionen sind verfügbar:
Angeben von Positionsparametern
Parameterindizierung
Standardmäßig verhalten sich Positionsfunktionen und Nicht-Positionsfunktionen identisch, wenn keine Positionsformatierung vorhanden ist. Sie geben den zu formatierenden Positionsparameter an, indem Sie %n$
am Beginn des Formatbezeichners verwenden, wobei n
die Position des zu formatierenden Parameters in der Parameterliste ist. Die Parameterposition beginnt bei 1 für das erste Argument nach der Formatzeichenfolge. Der Rest des Formatbezeichners folgt den gleichen Regeln wie der printf
-Formatbezeichner. Weitere Informationen zu Formatbezeichnern finden Sie unter Formatspezifikationssyntax: printf
und wprintf
Funktionen.
Im Folgenden finden Sie ein Beispiel für die Positionsformatierung:
_printf_p("%1$s %2$s", "November", "10");
In diesem Beispiel wird gedruckt:
November 10
Die Reihenfolge der Zahlen muss nicht mit der Reihenfolge der Argumente übereinstimmen. Hier ist beispielsweise eine gültige Formatzeichenfolge:
_printf_p("%2$s %1$s", "November", "10");
In diesem Beispiel wird gedruckt:
10 November
Im Gegensatz zu herkömmlichen Formatzeichenfolgen können Positionsparameter in einer Formatzeichenfolge mehrmals verwendet werden. Beispiel:
_printf_p("%1$d times %1$d is %2$d", 10, 100);
In diesem Beispiel wird gedruckt:
10 times 10 is 100
Alle Argumente müssen mindestens einmal in der Formatzeichenfolge verwendet werden. Die maximale Anzahl von Positionsparametern, die in einer Formatzeichenfolge zulässig sind, ist durch _ARGMAX
angegeben.
Breite und Genauigkeit
Sie können *n$
verwenden, um einen Positionsparameter als Breiten- oder Genauigkeitsbezeichner anzugeben, wobei n
die Position des Breiten- oder Genauigkeitsbezeichners in der Parameterliste ist. Die Position des Werts für Breite oder Genauigkeit muss unmittelbar nach dem Symbol * angezeigt werden. Beispiel:
_printf_p("%1$*2$s","Hello", 10);
or
_printf_p("%2$*1$s", 10, "Hello");
Mischen von Positions- und Nicht-Positionsargumenten
Positionsparameter dürfen nicht mit Nicht-Positionsparametern in der gleichen Formatzeichenfolge kombiniert werden. Wenn die Positionsformatierung verwendet wird, muss diese von allen Formatbezeichnern verwendet werden. printf_p
- und verwandte Funktionen unterstützen jedoch weiterhin Nicht-Positionsparameter in Formatzeichenfolgen ohne Positionsparameter.
Beispiel
// positional_args.c
// Build by using: cl /W4 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 i = 1,
j = 2,
k = 3;
double x = 0.1,
y = 2.22,
z = 333.3333;
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 arguments are numbers followed by a $ character.
_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);
// The positional arguments may appear in any order.
_printf_p("%1$s %2$s %3$s\n", s1, s2, s3);
_printf_p("%3$s %1$s %2$s\n", s1, s2, s3);
// Precision and width specifiers must be int types.
_printf_p("%3$*5$f %2$.*4$f %1$*4$.*5$f\n", x, y, z, j, k);
}
1 2 3
3 1 2
1 2 1
abc def ghi
ghi abc def
333.333300 2.22 0.100