printf语句中的分段错误

时间:2012-12-03 07:02:46

标签: c segmentation-fault printf

我在printf statment

中的insert函数中遇到Segmentation错误
#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 个答案:

答案 0 :(得分: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的内存以避免此问题。