In einem Code, den ich pflegen muss, habe ich einen Formatbezeichner %*s
gesehen. Kann mir jemand sagen, was das ist und warum es verwendet wird?
Ein Beispiel für seine Verwendung ist wie folgt:
fprintf(outFile, "\n%*s", indent, "");
Wird verwendet, um auf dynamische Weise die Breite des Feldes anzugeben :
- Die Breite wird nicht in der Formatzeichenfolge angegeben, sondern als zusätzliche Ganzzahlwert-Argument vor dem Argument, das formatiert werden muss.
"indent" gibt also an, wie viel Speicherplatz für die Zeichenfolge reserviert werden soll, die in der Parameterliste darauf folgt.
So,
printf("%*s", 5, "");
ist das gleiche wie
printf("%5s", "");
Es ist eine nette Möglichkeit, einige Leerzeichen in Ihre Datei zu setzen, um eine Schleife zu vermeiden.
Verwenden Sie "% * s" nicht für einen Puffer, der nicht NULL-terminiert (gepackt) ist, da Sie denken, dass nur das Feld "Länge" gedruckt wird.
http://www.cplusplus.com/reference/clibrary/cstdio/printf/
Die Breite wird nicht in der Formatzeichenfolge angegeben, sondern als zusätzliches ganzzahliges Argument vor dem zu formatierenden Argument.
beispiel: printf("%*s", 4, myValue);
ist gleichbedeutend mit printf("%4s", myValue);
.
Der Formatbezeichner% 4s gibt einen String in einer Feldbreite von 4 aus, dh printf zeigt den Wert mit mindestens 4 Zeichenpositionen an.
Wenn der auszugebende Wert less
mehr als 4 Zeichen lang ist, ist der Wert standardmäßig right justified
im Feld.
Wenn der Wert greater
als 4 Zeichen weit ist, kann die Feldbreite expands
die entsprechende Anzahl von Zeichen aufnehmen.
Um den Wert nach links auszurichten, verwenden Sie eine negative Ganzzahl, um die Feldbreite anzugeben.
Referenzen: Java ™ - Programmieren (frühe Objekte), zehnte Ausgabe
* Bewirkt, dass fprintf die Ausgabe auffüllt, bis sie n Zeichen breit ist, wobei n ein ganzzahliger Wert ist, der in einem Funktionsargument gespeichert wird, das dem durch den geänderten Typ dargestellten Argument vorangeht.
printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.