printf Konvertierungsspezifikationen sind% gefolgt von Flags, Breite, Genauigkeit, Längenmodifikator und Konvertierungsspezifizierer. Gibt es eine praktische Grenze für die Größe einer Konvertierungsspezifikation?
Ich musste in der Vergangenheit mit mehreren Standard printf
Implementierungen umgehen und mein allgemeiner Eindruck, dass es keine bestimmte Grenze auferlegt.
Die Formatzeichenfolge wird im Allgemeinen Zeichen für Zeichen analysiert. (Denken Sie einfach FSM.) Die meisten printf
Implementierungen vermeiden intern etwas zu puffern und sogar für Zahlen verwenden Sie die Char-by-char-Konvertierung in Dezimal (nicht einmal atoi
).
Sie können zum Beispiel überprüfen, wie die printf
innerhalb der FreeBSD kernel implementiert ist (wo von vielen anderen Implementierungen oft den Code heben). Das ist sicherlich eine vereinfachte Implementierung (mit kernelspezifischen Tweaks), spiegelt jedoch wider, wie die Formatzeichenfolge oft gehandhabt wird.
N.B.Just überprüft Glibc vfprintf()
Implementierung und sie intern zuweisen einen Puffer (falls erforderlich) mit malloc()
. Also keine bestimmte Grenze dort.
Meine Frage ist, was ist die Länge der maximalen einzelnen Spezifikation in einer Formatzeichenfolge, die nach C99-Standard erstellt werden kann?
Der Formatbezeichner ist ein Teil eines Strings und Stringlänge meines Wissens ist nicht durch den Standard beschränkt. Und wie ich oben erwähnt habe, habe ich noch nie eine Implementierung mit einer solchen Beschränkung gesehen.
Ah ich sehe, Sie sind nur an praktischen Grenzen für eine einzelne Formatangabe einer Formatzeichenfolge interessiert. Ich lösche meine Antwort dann. –
Ich bin neugierig - Gibt es irgendeinen Grund, warum Sie neben Neugier wissen wollen? – nategoose
@nategoose: Ich denke über einen speziellen Wrapper nach 'snprintf' nach und möchte verstehen, ob ich einige temporäre Puffer statisch zuweisen kann. – zaharpopov