Segmentation fault + atoi



  • Hallo,

    ich bin grade durch Zufall auf dieses Forum gestoßen und habe in meiner Verzweiflung beschlossen, dass ich Hilfe brauche 😉

    Ich bin grade dabei mich in c einzuarbeiten und bin dabei auf atoi gestoßen. Nun habe ich ausprobiert wie es funktioniert....bei mir erstmal gar nicht. Vielleicht wisst ihr ja wo mein Problem ist, wäre für jede Hilfe dankbar 🙂

    #include <stdio.h>
    
    int main()
    
    {
    	int nzeichenf=0;
    	char zeichenf;
    	printf("Bitte Zeichenfolge eingeben\n");
    	gets("zeichenf");
    	nzeichenf=atoi(zeichenf);
    	printf(" %d \n",nzeichenf);
    	return 0;
    }
    

    Kurze erklärung zu Funktion für den Fall das ich sie komplett verhauen habe...ich möchte einfach nur das eine Zeichenfolge eingelesen wird, atoi sie umwandelt und die integerzahl dann ausgegeben wird.
    Der gcc compiler wandelt dann auch alles um und ich war schon ziemlich zufrieden als das Programm lief, allerdings kommt nachdem man eine Zeichenkette eingetippt hat folgender Fehler:

    Bitte Zeichenfolge eingeben
    13f45
    Segmentation fault

    Hat jemand ne Idee? ich wäre super glücklich, danke im Vorfeld!
    Lg Naienna



  • Du solltest erst mal Speicherplatz reservieren z. B. char zeichenf[50] und bei gets die Anführungszeichen weglassen.

    PS: Und du solltest beim gcc die Warnungen anzeigen lassen, d. h. mit -Wall kompilieren.



  • Es klappt, super, vielen Dank! 🙂



  • atoi ist die denkbar schlechteste Variante auch der Standardbibliothek, um Strings in int zu wandeln.

    atoi("x") liefert 0
    atoi("0") liefert 0
    atoi("123abc") liefert 123
    

    alles wohl kaum im Sinne des Anwenders.



  • Anstatt immer zu sagen, was schlecht ist, kannst du auch mal sagen was gut ist. Z. B.

    (int) strtol(str, (char **)NULL, 10);
    

    Oder vorher mit isdigit() die Zeichenkette überprüfen. Dann macht ein atoi auch nichts mehr aus...

    L. G.
    Steffo


Anmelden zum Antworten