2012-11-21 17 views
7

Bir dosyayı açmak ve ondan bazı verileri okumak için basit bir C programı üzerinde çalışıyorum. Derleme hataları yoktur, ancak programı belirli bir dosyada çalıştırdığımda, "Segmentation Fault: code dumped" hatası alırım. Kodumun en üstünde bir yazdırma ifadesi ekledim ve çalışmaz. Henüz bir şey yapmadığınızda bölümleme hatası almak mümkün mü?İlk satır kodundan önce bölümlendirme hatası

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

} 

Bu, kendi metin sürümünde çalıştırdığımda çalışır, ilk satırı yazdırır. Ancak, başka bir dosyada çalıştırdığımda, texttest.vmf, bölümleme hatası alıyorum ve ilk baskı çalışmıyor. VMF'ler Valve Map Files'dır, ancak standart metin biçimindedirler. Bu dosya 3.7 KB büyüklüğündedir. Herhangi bir fikir?

+1

Aşağıdaki cevabı takip etmelisiniz, büyük bir olasılıkla bir hata olup olmadığını görmek için fopen iadesini kontrol etmemenizdir. –

cevap

17

sizin kod printf önce başarısız olduğunu gerekli değildir: printf çağrısı başarılı olabilir, ama avutmaya çıktı tamponlu çünkü çıkış ekranına yazılmıştır önce program çöktü olabilir. Çıkış dizesine \n eklenmesi, konsol arabelleği temizlenmesine neden olur. printf s ile hata ayıklamak istiyorsanız, her zaman biçim dizenizin sonuna \n eklemelisiniz.

1

fopen Aramanız muhtemelen başarısız oluyordur. Eğer fp kullanma girişiminde önce dönüş değeri kontrol etmeyi deneyin:

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

BOŞ makro kullanımı için #include <stdlib.h> eklemek için emin olun.

İlgili konular