Strings formattieren wie in printf()....



  • Dass der Code Bufferoverflows geradezu einlädt, weißt du aber? 😉



  • tag schrieb:

    Dass der Code Bufferoverflows geradezu einlädt, weißt du aber? 😉

    Zeig ne alternative die sicher ist.

    Solange answer (auf jedenfall >9) ausreichend vom rufenden dimensioniert ist, sollte es problemlos sein.

    Und die Standardprobleme von *printf sind ja bekannt



  • PAD schrieb:

    Und die Standardprobleme von *printf sind ja bekannt

    Erzähl mal, bitte.



  • Das Argument mit den weiteren Includes verstehe ich nicht. Die kommen doch in deinen Header, da er Sie benötigt. Ich muss weiterhin nur deine Datei einbinden.



  • Daniel E. schrieb:

    PAD schrieb:

    Und die Standardprobleme von *printf sind ja bekannt

    Erzähl mal, bitte.

    Da du einen Formatierstring angibst, und dahinter eine variable argumentenliste, musst du als Programmierer sicherstellen, das die argumente und die Element im formatierstring matchen.

    Schreibst du z.B. %f werden 4 Bytes vom Stack ausgewertet, schribst du %lf werden 8 Bytes vom Stack ausgewertet, vertust du dich kommt der Stack durcheinander mit nicht vorhersehbaren folgen. wählst du den Asugabebuffer bei den sprintf zu klein erzeugst du fantastische Buffer overflows, analog oder noch schlimmer gilt dies für die scanf Familie. Und keine Compiler kann oder will prüfen ob das passt oder nicht.



  • PAD schrieb:

    Da du einen Formatierstring angibst, und dahinter eine variable argumentenliste, musst du als Programmierer sicherstellen, das die argumente und die Element im formatierstring matchen.

    Und ich dachte schon, es sei was ernstes.

    wählst du den Asugabebuffer bei den sprintf zu klein erzeugst du fantastische Buffer overflows,

    snprintf.



  • Helium schrieb:

    Das Argument mit den weiteren Includes verstehe ich nicht. Die kommen doch in deinen Header, da er Sie benötigt. Ich muss weiterhin nur deine Datei einbinden.

    ok, da hab ich nicht dran gedacht... aber jeder Benutzer der Funktion muss die (IMO nicht auf den ersten Blick verstaendliche) Syntax kennen....



  • Daniel E. schrieb:

    snprintf.

    Das ist Schummeln, das ist kein C++98. (Soweit ich das aus der MSDN sehe.)



  • operator void schrieb:

    Daniel E. schrieb:

    snprintf.

    Das ist Schummeln, das ist kein C++98. (Soweit ich das aus der MSDN sehe.)

    Jup, die letzte Seite ging es allerdings von »tiefem« über »abgrundtiefstem« bis einfach nur C.



  • aber jeder Benutzer der Funktion muss die (IMO nicht auf den ersten Blick verstaendliche) Syntax kennen....

    Ich sehe da jetzt nicht das Problem. Das ist grundsätzlich bei allen Funktionen so, nicht nur bei dieser einen.



  • wenn er formatieren will wie mit printf, dann sollte man es auch so machen.

    Und es ist regulärer Bestandteil von C++ (auch wenns manche stört).

    Manchmal ist es aber besser lesebar als mit cout


Anmelden zum Antworten