Frage

printf Umwandlung Spezifikationen sind % von Fahnen gefolgt, Breite, Präzision, Längenmodifizierer und Konvertierungsspezifizierer. Gibt es praktische Grenze der Größe einer Konvertierungsspezifikation?

d. %s ist 2 Zeichen lang, während %08.2f 6 Zeichen lang ist. Meine Frage ist, was ist die Länge der maximalen Einzel Spezifikation in einem Format-String, die erstellt werden können, nach C99-Standard?

War es hilfreich?

Lösung

Es gibt keine solche Umwandlung Spezifikation der maximalen Länge. Wenn Sie glauben, eine solche spec gefunden habe, kann ich mit einer kommen, die ein Zeichen länger ist.

Zum Beispiel Feldbreite und Genauigkeit prüfen. Die Norm sagt sie Dezimalzahlen sind aber nicht festgelegt, ihre Reichweite. Daher können Sie Konvertierungsspezifizierer mit beliebig großen ganzen Zahlen als Feldbreite oder Genauigkeit schreiben.

Andere Tipps

Wenn Sie eine Zeichenkette meinen, es ist 4095 Zeichen

5.2.4.1 Übersetzung Grenzen
...
- 4095 Zeichen in einer Zeichenkette wörtlichen oder Weit Stringliteral (nach Verkettung)
...

von C89 Limit von 509 Zeichen gebissen worden (nicht für printf / scanf Formatstrings)

Ich habe, so dass diese eine der gut ändert, hervorgerufen durch C99: -)


Edit: glibc-Implementierung ( nicht Standard-Definition )

glibc Implementierung wird die Breite von einer read_int Funktion.
Also, für diese Implementierung, offenbar, vielleicht , die Grenze INT_MAX ist ( Ich habe nicht für die read_int Funktion gesucht ).

printf Konvertierungsspezifizierer sind% von Fahnen gefolgt, Breite, Präzision, Längenmodifizierer und Konvertierungsspezifizierer. Gibt es praktische Grenze der Größe einer Konvertierungsspezifikation?

Ich hatte in Vergangenheit mit mehreren Standards printf Implementierungen und meinem allgemeinen Eindruck zu behandeln, dass es keine besondere Beschränkung auferlegt.

Das Format-String ist in der Regel geparsten Zeichen für Zeichen. (Denken Sie einfach FSM .) Die meisten printf Implementierungen vermeiden Pufferung alles intern und auch für Zahlen verwenden, die char von char Umwandlung in Dezimalzahlen (nicht einmal atoi).

Sie können beispielsweise prüfen, wie die printf innerhalb der FreeBSD-Kernel (wo aus vielen anderen Implementierungen oft den Code heben). Das ist sicherlich Implementierung vereinfacht (mit einigem Kernel-spezifischen Optimierungen), aber es zeigt, wie das Format-String wird häufig behandelt.

N. B. So überprüft vfprintf() Umsetzung der glibc und sie verteilen intern einen Puffer mit malloc() (falls erforderlich). Also weder besondere Beschränkung gibt.

Meine Frage ist, was ist die Länge der maximalen Einzel Spezifikation in einem Format-String, die erstellt werden können, nach C99-Standard?

Die Formatangabe ist ein Teil eines Strings und String-Länge meines Wissens wird durch den Standard nicht darauf beschränkt. Und wie ich oben erwähnt habe, weder ich je eine Implementierung mit einer solchen Grenze gesehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top