>我被困在这里一个小时了。不知道为什么当文件指针不为空时出现分段错误。任何人请帮助我。
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;}
你还期待什么?不允许写入字符串文本的只读内存。
您应该分配一些读/写内存...例如malloc
(不要忘记在最后free
),或者在堆栈字符data[1024];
问题不在于文件指针;问题在于您的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
}
为什么不尝试给word
一些内存来存储这些数据呢?
即数组 - 尝试
char data[100];