Ich arbeite in C++.Gibt es eine Möglichkeit festzustellen, wie viele Zeichen von sprintf geschrieben werden?
Ich möchte eine potenziell sehr lange formatierte Zeichenfolge mit Sprintf (speziell eine sichere gezählte Version wie _snprintf_s, aber die Idee ist die gleiche) schreiben. Die ungefähre Länge ist zur Kompilierzeit unbekannt, daher muss ich dynamisch zugewiesenen Speicher verwenden, anstatt mich auf einen großen statischen Puffer zu verlassen. Gibt es eine Möglichkeit zu bestimmen, wie viele Zeichen für einen bestimmten Sprintf-Aufruf benötigt werden, so dass ich immer sicher sein kann, dass ich einen ausreichend großen Puffer habe?
Mein Fallback ist, ich nehme nur die Länge der Formatzeichenfolge, verdopple es und versuche es. Wenn es funktioniert, großartig, wenn es nicht tut, verdopple ich einfach die Größe des Puffers und versuche es erneut. Wiederholen bis es passt. Nicht gerade die klügste Lösung.
Es sieht so aus, als ob C99 die Übergabe von NULL an snprintf unterstützt, um die Länge zu erhalten. Ich nehme an, ich könnte ein Modul erstellen, das diese Funktionalität umschließt, wenn auch sonst nichts, aber ich bin nicht verrückt nach dieser Idee.
Vielleicht könnte ein fprintf zu "/ dev/null"/"nul" stattdessen funktionieren? Irgendwelche anderen Ideen?
EDIT: Gibt es alternativ eine Möglichkeit den Sprintf zu "zerhacken", so dass er mitten in den Schreibvorgang geht? Wenn das möglich ist, könnte es den Puffer füllen, verarbeiten und dann von dort, wo er unterbrochen wurde, nachfüllen.
Nicht sicher, warum das war downvoted ... –
Ich habe es nicht getan, aber ich kann vielleicht sehen, warum es getan wurde. Sie brauchen C99 nicht, da PD-Versionen von snprintf() da draußen sind. Oder vielleicht, weil die Frage speziell nach einer printf() Lösung und nicht nach stringstream gefragt wurde. Ich weiß nicht, ich habe es längst aufgegeben, Drive-by-Down-Wähler zu verstehen. – paxdiablo