wake-up-neo.net

Was bedeutet der Formatbezeichner von% * s?

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, "");
39
Aamir

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.

48
akappa

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.

8
user2132064

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);.

1
pauldoo

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

1

* 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.
0
jitter