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

当我的文件指针不为空时,fscanf返回分段错误,c,segmentation-fault,scanf,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);

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

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;}

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

i、 e.数组-尝试

 char data[100];

你还指望什么?不允许写入字符串文字的只读内存


您应该分配一些读/写内存。。。e、 g
malloc
(不要忘记在末尾释放
free
),或者在堆栈上char
数据[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
}

必须确保存储字符串的区域安全。此外,请注意,您不能修改常量字符串的值。