2012-11-21 17 views
7

Pracuję nad prostym programem C, aby otworzyć plik i odczytać z niego niektóre dane. Nie ma błędów kompilacji, ale po uruchomieniu programu dla określonego pliku pojawia się błąd "Usterka segmentacji: zrzucony kod". Wstawiłem polecenie drukowania na samej górze mojego kodu, i to nie jest uruchamiane. Czy możliwe jest uzyskanie błędu segmentacji, gdy jeszcze nic nie zrobiłeś?Błąd segmentacji przed pierwszą linią kodu

#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); 

} 

Działa to, gdy uruchomię go w wersji tekstowej, wypisuje pierwszą linię. Jednak po uruchomieniu go na innym pliku, texttest.vmf, otrzymuję błąd segmentacji i pierwszy wydruk nie zostanie wykonany. Pliki VMF są plikami map zaworów, ale są w standardowym formacie tekstowym. Ten plik ma około 3,7 KB. Jakieś pomysły?

+1

Powinieneś zastosować się do poniższej odpowiedzi, najprawdopodobniej problem polega na tym, że nie sprawdzasz zwrotu fopen, aby sprawdzić, czy wystąpił błąd. –

Odpowiedz

17

Nie jest konieczne, że kod nie powiedzie przed printf: wezwanie do printf może udało, ale dlatego, że wyjście na konsolę jest buforowane, program może ulec awarii, zanim wyjście zostało napisane na ekranie.

Dodanie \n do ciągu wyjściowego powoduje, że bufor konsoli zostanie przepłukany. Jeśli szukasz do debugowania przez printf s, zawsze powinieneś dodać \n na końcu łańcucha formatu.

1

Twoje połączenie fopen prawdopodobnie nie działa. Spróbuj sprawdzanie wartości zwracanej zanim spróbuje użyć fp:

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

Upewnij się, aby dodać #include <stdlib.h> do użycia makra NULL.

Powiązane problemy