printf ein Argument zweimal

Lesezeit: 2 Minuten

Ich möchte ein zusätzliches Argument an übergeben printf und zweimal drucken, z

printf("%s%s","somestring");       // prints somestringsomestring

Gibt es eine Möglichkeit, dies zu tun?

  • stackoverflow.com/questions/19327441/…

    – Barmar

    26. Mai 2017 um 1:43 Uhr

  • In ISO C müssten Sie eine Variable (oder eine Varargs-Liste) verwenden, um den Wert zu speichern, und ihn dann zweimal in der Argumentliste angeben

    – MM

    26. Mai 2017 um 2:16 Uhr

  • Gibt es dafür einen praktischen Bedarf oder ist das eine theoretische Frage?

    – i486

    26. Mai 2017 um 12:52 Uhr

Benutzeravatar von dbush
dbusch

Wenn Sie Linux oder ein anderes UNIX-ähnliches System verwenden, können Sie verwenden $ um die Argumentnummer anzugeben:

printf("%1$s%1$s\n", "hello");

In diesem Beispiel 1$ bedeutet “benutze das erste Argument”. Wir verwenden diese Syntax auch mehrmals, damit wir ein bestimmtes Argument mehr als einmal verwenden können.

Das Linux-Manpage für printf gibt weitere Details:

Die Argumente müssen (nach der Typumwandlung) korrekt mit dem Konvertierungsbezeichner übereinstimmen. Standardmäßig werden die Argumente in der angegebenen Reihenfolge verwendet, wobei jedes ‘*’ und jeder Konvertierungsbezeichner nach dem nächsten Argument fragt (und es ist ein Fehler, wenn nicht genügend Argumente angegeben werden). Man kann auch explizit angeben, welches Argument genommen wird, an jeder Stelle, wo ein Argument erforderlich ist, indem man “%m$” anstelle von “%” schreibt und “m$” statt ‘‘, wobei die Dezimalzahl m die Position in der Argumentliste des gewünschten Arguments bezeichnet, beginnend bei 1. Also,

printf("%*d", width, num);

und

printf("%2$*1$d", width, num);

sind gleichwertig. Der zweite Stil erlaubt wiederholte Verweise auf dasselbe Argument. Der C99-Standard enthält nicht den Stil mit ‘$’, der aus der Single UNIX Specification stammt. Wenn der Stil mit ‘$’ verwendet wird, muss er durchgehend für alle Konvertierungen verwendet werden, die ein Argument und alle Breiten- und Genauigkeitsargumente verwenden, aber er kann mit “%%”-Formaten gemischt werden, die kein Argument verbrauchen. Die Anzahl der mit ‘$’ angegebenen Argumente darf lückenlos sein; Wenn beispielsweise die Argumente 1 und 3 angegeben sind, muss Argument 2 auch irgendwo in der Formatzeichenfolge angegeben werden.

  • Vielen Dank. Akzeptiere, wenn das System es zulässt.

    – DEADBEEF

    26. Mai 2017 um 1:45 Uhr

  • Nur eine Anmerkung pro man 3 printf: “Der C99-Standard enthält nicht den Stil mit ‘$’, der aus der Single UNIX Specification stammt.

    – David C. Rankin

    26. Mai 2017 um 1:54 Uhr

  • ^ mit anderen Worten, dies ist eine POSIX-Erweiterung

    – MM

    26. Mai 2017 um 2:15 Uhr

  • Gibt es auch eine Möglichkeit, die ich tun könnte printf("hello%s"); und drucken lassen hellohello%szB das 0. Argument ausgeben? 0$ ist arbeitslos.

    – DEADBEEF

    26. Mai 2017 um 16:46 Uhr


  • @0xBADC0DE Nein, das geht nicht. Die Formatzeichenfolge definiert, was die folgenden Argumente sind. Es kann sich so nicht selbst referenzieren.

    – dbusch

    26. Mai 2017 um 16:50 Uhr

1433120cookie-checkprintf ein Argument zweimal

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

Privacy policy