Segmentation fault in fscanf();



  • Hallo,
    ich habe einen Segmentation Fault in der fscanf() Zeile folgender Funktion:

    void get_words(hangman &wort){         // read an ASCII file and look for words
    
    	FILE * fp;
    	char * buf;
    
    	fp=fopen("hangman.config","r");
    	fscanf(fp,"%s",buf);
    
    	chose_word(buf,wort);
    
    	fclose(fp);
    }
    

    ich frage mich was da schief läuft?!? Habe das ganze auch schon mit
    fgets(buf,1024,fp) versucht und dabei den buffer als char buf[1024] deklariert
    aber da kam derselbe fehler.

    Viele Dank im Voraus,
    felix



  • Du musst für buf geng Speicher reservieren, dass die ganze Zeile reinpasst. Im moment zeigt buf auf einen undefinierten Bereich.

    Edit:
    Noch was: Überprüf doch bitte, ob fp != NULL ist, dass du sicher sein kannst, dass die Datei auch geöffnet werden konnte.



  • Also note that you shouldn't do call like this anyway, as size of string is not specified (to fscanf call) and so buffer of any size might be not enough.



  • Was sie dir sagen wollten ist das du deinen code so ändern sollst:

    void get_words(hangman &wort){         // read an ASCII file and look for words 
    
        FILE * fp; 
        char * buf; //Alternativ ohne allozieren char buf[1024]
    
        buf = (char *)malloc(1024*sizeof(char)); //Speicher für deine Zeile holen    
        fp=fopen("hangman.config","r");
        if(fp == NULL)  // Prüfen ob das öffnen geklappt hat
        {
             //error
        }
        else
        {
        fscanf(fp,"%s",buf); 
    
        chose_word(buf,wort); 
    
        fclose(fp); 
        }
    }
    

    mfg tobZel


Anmelden zum Antworten