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?
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?
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%s
zB 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
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