2012-12-03 61 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