当我的文件指针不为空时,fscanf正在返回分段错误

时间:2013-12-22 12:44:17

标签: c segmentation-fault scanf

我被困在这里一个小时。当文件指针不为空时,不知道为什么我会出现分段错误。 任何人都帮助我。

int load(char* dictionary){
char* word = "";
FILE* fp=fopen(dictionary,"r");
if ( fp!= NULL )
{
    while (fscanf(fp,"%s",word) != EOF) // **getting segmentation fault**
    {
        hash_put(word);
    }
}
else
{
        return false;
}
fclose(fp);
return true;}

3 个答案:

答案 0 :(得分:1)

您还期待什么?不允许写入字符串文字的只读存储器。

你应该分配一些读/写内存......例如malloc(最后不要忘记free),或者堆栈char data[1024];

答案 1 :(得分:1)

问题不在于您的文件指针;问题是你的word变量。

您已将word设置为指向字符串文字""),它只有0终结符的空间。尝试修改字符串文字的内容会调用未定义的行为。这个以及你将要在文字末尾存储内容的事实,这就是你的代码崩溃的原因。

阵列不会增长以容纳额外的数据。在尝试读取数据之前,必须分配足够的内存来存储数据。

#define WORD_SIZE ... // large enough to hold the largest word in your file
char word[WORD_SIZE];
...
while ( fgets( word, sizeof word, fp ) )
{
  // do stuff with word
}

答案 2 :(得分:0)

为什么不尝试给word一些内存来存储这些数据?

即。一个数组 - 试试

 char data[100];