sprintf bringt programm zum beenden



  • Guten Morgen alle zusammen,

    ich habe folgendes Problem, ich will einen Formatierten String in eine char variable schreiben, nur leider bricht mir der Quellcode nach sprintf einfach ab und ich weiß nicht wieso.

    char *ausgabe="";
            double mur=0.0, result=10.0
            sprintf(ausgabe,"<%lf>\t<%lf>\n",mur, result);
    	printf("hier ist der text : %s", ausgabe);
    

    Nach sprintf wird das Programm abgebrochen und ich weiß nicht wieso.

    Mit einem von der Länge her definierten Char z.b: char ausgabe[50] funktioniert es,
    ich weiß aber vorher nicht wie lang die Ausgabe ist, deshalb geht diese Option bei mir leider nicht.
    Kann mir bitte jemand erklären wo mein Programmierfehler liegt.

    Danke



  • So reservierst du fuer dein Char-Array genau 1 Byte, was in jedem Fall zu wenig ist und damit einen overflow und undefiniertes Verhalten ausloest.

    Du musst dich so oder so vorher festlegen, da du den Speicher fuer das char-array vor Aufruf von sprintf reservieren musst. Praktisch schaetzt man in solchen Faellen idR. einfach ab, wie viel Platz in so einem Puffer maximal gebraucht werden koennte, reserviert den Speicher und behaelt halt evtl. was davon ueber. Ist in deinem all auch nicht weiter schwierig - ich denke mal 80 Byte sollten locker reichen.



  • des weiteren würde ich je nach compiler noch snprintf an Stelle von sprintf benutzen, sicherheitshalber (längenchecks).



  • Du kannst es so machen, wenn du vorher Speicher mit malloc reservierst.
    So geht es schief, auch wenn man meinen könnte, das wenigstens ein float-Wert in die 4 Byte reinpassen könnte. ( Auf nem 64 Bit Rechner dürften es 8 Byte sein )

    Gruß,
    B.B.



  • Big Brother schrieb:

    So geht es schief, auch wenn man meinen könnte, das wenigstens ein float-Wert in die 4 Byte reinpassen könnte.

    so geht es schief, weil der Zeiger auf einen read-only Bereich zeigt.


Anmelden zum Antworten