Was bedeutet die Formatbezeichner s% * bedeuten?
-
05-07-2019 - |
Frage
In einigen Code, den ich zu halten habe, 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:
fprintf(outFile, "\n%*s", indent, "");
Lösung
Er wird verwendet, um anzugeben, in einer dynamischen Art und Weise, was die Breite des Feldes :
- Die Breite wird im Formatstring nicht angegeben, sondern als zusätzliches ganzzahligen Wert vor dem Argument Argument, das formatiert werden muss.
so „indent“ gibt an, wie viel Speicherplatz für die Zeichenfolge zuweisen, die sie in der Parameterliste folgt.
So
printf("%*s", 5, "");
ist die gleiche wie
printf("%5s", "");
Es ist eine schöne Möglichkeit, einige Räume in der Datei zu setzen, um eine Schleife zu vermeiden.
Andere Tipps
Verwenden Sie „% * s“ nicht auf einem Puffer, beendet nicht NULL ist (gepackte) denken, dass es nur gedruckt wird „Länge“ ein.
http://www.cplusplus.com/reference/clibrary/cstdio/ printf /
Die Breite wird in der Formatzeichenkette nicht spezifiziert, sondern als zusätzliches Argument ganzzahligen Wert vor dem Argument, das formatiert werden muss.
z. printf("%*s", 4, myValue);
ist equivelant printf("%4s", myValue);
Die Formatbezeich% 4S gibt einen String in einer Feldbreite von 4, das heißt printf zeigt den Wert mit mindestens 4 Zeichenpositionen.
Wenn der Wert ausgegeben werden soll less
als 4 Zeichenpositionen breit, ist der Wert right justified
im Bereich standardmäßig aktiviert.
Wenn der Wert greater
als 4 Zeichenpositionen breit ist, die Feldbreite expands
die entsprechende Anzahl von Zeichen aufzunehmen.
links, um den Wert rechtfertigen, eine negative ganze Zahl verwenden, um die Feldbreite angeben.
Referenzen: Java ™ So programmieren (Early Objects), Zehnte Ausgabe
* Verursacht fprintf aufzufüllen die Ausgabe bis es n Zeichen breit ist, wobei n ein ganzzahliger Wert in dem Funktionsargument gespeichert ist nur, dass durch den modifizierten Typen dargestellt vorhergehenden.
printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.