我被困在这里一个小时。当文件指针不为空时,不知道为什么我会出现分段错误。 任何人都帮助我。
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;}
答案 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];