2012-11-21 4 views
7

Sto lavorando a un semplice programma C per aprire un file e leggere alcuni dati da esso. Non ci sono errori di compilazione, ma quando eseguo il programma su un determinato file, ottengo un errore "Segmentation Fault: code dumped". Ho inserito una dichiarazione di stampa nella parte superiore del mio codice e non viene eseguita. È possibile ottenere un errore di segmentazione quando non hai ancora fatto nulla?Errore di segmentazione prima della prima riga del codice

#include <stdio.h> 


int main(int argc, char **argv) 
{ 
    printf("%s", "Made it to here!"); 
FILE *fp; 
char input[100]; 
fp = fopen(argv[1], "r+b"); 
fgets(input, sizeof(input), fp); 
printf("%s", input); 
fclose(fp); 
return(0); 

} 

Questo funziona quando lo eseguo sulla versione testo di se stesso, stampa la prima riga. Tuttavia, quando lo eseguo su un altro file, texttest.vmf, ottengo l'errore di segmentazione e la prima stampa non viene eseguita. I VMF sono Valve Map Files, ma sono in formato testo standard. Questo file ha una dimensione di circa 3,7 KB. Qualche idea?

+1

Dovresti seguire la risposta qui sotto, il problema più probabile è che non stai controllando il ritorno di fopen per vedere se c'è stato un errore. –

risposta

17

Non è necessario che il codice non riesce prima printf: la chiamata a printf sia riuscito, ma perché l'uscita di consolare è tamponata, il programma potrebbe essere bloccato prima che l'uscita è stata scritta allo schermo.

L'aggiunta di \n alla stringa di output provoca il flush del buffer della console. Se stai cercando di eseguire il debug di printf s, devi sempre aggiungere \n alla fine della stringa di formato.

1

È probabile che la chiamata fopen non riesca. Prova a controllare il valore di ritorno prima di tentare di utilizzare fp:

FILE *fp; 
char input[100]; 
if((fp = fopen(argv[1], "r+b") == NULL) { 
    fprintf(stderr, "ERROR: Cannot open file.\n"); 
    return 1; 
} 

Assicurarsi di aggiungere #include <stdlib.h> per l'utilizzo della macro NULL.