2012-12-03 212 views
0

我得到的printf statment分段故障

#include <stdio.h> 
#include <stdlib.h> 
void Insert(char w[]) 
{ 
int j; 
int n=5; 
printf("word is %s AFTER\n", w); 
} 


int main(int argc, char *argv[]) 
{ 
     FILE *fp; 
     if (argc !=2) 
       fp=fopen("words.txt", "r"); 
     else 
       fp=fopen(argv[1], "r"); 
     char line[28]; 
     while(!feof(fp)){ 
       fgets(line, 256, fp); 
       Insert(line); 
     } 
} 

內插入函數內部分段故障WORD.TXT它只是一堆在每一行字,即

apple 
banana 
... 
zoo 

( ...只是指之間的一堆話) 它打印此:

word is apple 
AFTER 
word is banana 
AFTER 
...(a bunch more repetitions)          
word is cookie 
Segmentation Fault(core dumped) 

爲什麼會出現分段錯誤?它完美地打印了這個詞。並沒有打印AFTER

謝謝。

+1

我不認爲這是錯誤,但爲什麼你最多讀取256個字節到一個只有28b的數組中?將行[28]更改爲行[256],看看是否有幫助。 – Gille

+1

'char line [28];'然後'fgets(line,256,fp);'看起來很討厭。你可以有一個[非常好的解決方案](http://en.wikipedia.org/wiki/Sizeof)。 – 2012-12-03 07:06:09

+2

'char line [28];'=>'char line [256];' –

回答

1

分配的內存只有28字節,其中試圖複製256字節。

char line[28]; <-- 28 bytes only allocated to line. 
     while(!feof(fp)){ 
       fgets(line, 256, fp); <-- 256 bytes read into line. 

增加內存line以避免此問題。

+1

請不要使用重複的恆定大小!我建議使用'sizeof(line)'代替。 – 2012-12-03 07:12:34

+1

@ H2CO3:請不要將代碼與多餘的括號混淆。 'sizeof line'就足夠了。 – AnT