Was bedeutet der Formatbezeichner %*s?

Lesezeit: 3 Minuten

Aamirs Benutzeravatar
Aamir

In einigen Codes, die ich pflegen muss, habe ich einen Formatbezeichner gesehen %*s . 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, "");

  • Wichtig ist, dass die geförderte Art von indent ist ein int.

    – chux – Wiedereinsetzung von Monica

    7. November 2021 um 3:33 Uhr

Benutzeravatar von akappa
Akappa

Es wird verwendet, um auf dynamische Weise anzugeben, wie breit das Feld ist:

  • Die Breite wird nicht im Formatstring angegeben, sondern als zusätzliches ganzzahliges Argument vor dem zu formatierenden Argument.

“Einzug” gibt also an, wie viel Platz für die Zeichenfolge zugewiesen werden soll, die ihm in der Parameterliste folgt.

So,

printf("%*s", 5, "");

ist das gleiche wie

printf("%5s", "");

Es ist eine gute Möglichkeit, einige Leerzeichen in Ihre Datei einzufügen und eine Schleife zu vermeiden.

  • @EthanHeilman, das * bedeutet in der scanf-Funktionsfamilie etwas VÖLLIG anderes.

    – John Hascall

    6. September 2014 um 20:56 Uhr

  • Beachten Sie, dass das Feld bei einer negativen Zahl linksbündig ausgerichtet wird. Das ist, printf("[%*s]\n", -10, "hello") wird ausgegeben “[hello     ]” statt “[     hello]” die Sie erhalten würden, wenn Sie sie verwenden +10 (oder 10).

    – Jonathan Leffler

    2. September 2017 um 23:45 Uhr


Verwenden Sie “%*s” nicht für einen Puffer, der nicht NULL-terminiert (gepackt) ist, da Sie denken, dass er nur das “Längen”-Feld druckt.

  • Verwenden Sie “%.*s”, um dies zu erreichen!

    – Andi G

    19. Februar 2015 um 9:28 Uhr

  • @AndyG Ich habe Probleme zu verstehen, wie ‘%.*s’ dabei hilft. Aus den Dokumenten hiersieht es so aus, als ob der einzige Unterschied zwischen den beiden Formatbezeichnern darin besteht, dass „%.*s“ negative Genauigkeitswerte ignoriert.

    – Stromquelle97

    17. September 2021 um 3:06 Uhr


  • @powersource97, %.*s bedeutet, dass Sie die lesen precision Wert aus einem Argument, und Genauigkeit ist die maximale Anzahl der zu druckenden Zeichen, und %*s du liest die width Wert aus einem Argument, das die minimale Anzahl von Zeichen ist, die gedruckt werden sollen.

    – Varga

    24. September 2021 um 20:50 Uhr

Der Formatbezeichner %4s gibt einen String in einer Feldbreite von 4 aus, dh printf zeigt den Wert mit mindestens 4 Zeichenstellen an.

Ist der auszugebende Wert less als 4 Zeichenstellen breit, ist der Wert right justified standardmäßig im Feld.

Wenn der Wert ist greater als 4 Zeichenstellen breit, die Feldbreite expands um die entsprechende Anzahl von Zeichen aufzunehmen.

Um den Wert linksbündig auszurichten, verwenden Sie eine negative Ganzzahl, um die Feldbreite anzugeben.

Verweise: Java™ How To Program (frühe Objekte), zehnte Ausgabe

Benutzeravatar von zeitgeist
Zeitgeist

Bei Verwendung in printf und fprintf:

printf("%*s", 4, myValue); is equivalent to printf("%4s", myValue);

Es zeigt die Variable mit minimaler Breite, Rest rechtsbündige Leerzeichen. Um den Wert linksbündig auszurichten, verwenden Sie eine negative Ganzzahl.

Bei Verwendung in scanf und sscanf:

/* sscanf example */
#include <stdio.h>

int main ()
{
  char sentence []="Rudolph is 12 years old";
  char str [20];
  int i;

  sscanf (sentence,"%s %*s %d",str,&i);
  printf ("%s -> %d\n",str,i);
  
  return 0;
}

Ausgabe:

Rudolph -> 12

Es wird verwendet, um eine Zeichenfolge zu ignorieren.

* Bewirkt, dass fprintf die Ausgabe auffüllt, bis sie n Zeichen breit ist, wobei n ein ganzzahliger Wert ist, der in einem Funktionsargument gespeichert ist, das direkt vor dem durch den modifizierten Typ repräsentierten liegt.

printf("%*d", 5, 10) //will result in "10" being printed with a width of 5.

Benutzeravatar von pauldoo
pauldoo

http://www.cplusplus.com/reference/clibrary/cstdio/printf/

Die Breite wird nicht im Formatstring angegeben, sondern als zusätzliches ganzzahliges Argument vor dem zu formatierenden Argument.

z.B: printf("%*s", 4, myValue); ist gleichbedeutend mit printf("%4s", myValue);.

1412210cookie-checkWas bedeutet der Formatbezeichner %*s?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy