当我的文件指针不为空时,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
}
必须确保存储字符串的区域安全。此外,请注意,您不能修改常量字符串的值。