【问题标题】:fscanf is returning segmentation fault while my file pointer is not nullfscanf 返回分段错误,而我的文件指针不为空
【发布时间】:2013-12-22 12:44:17
【问题描述】:

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

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

【问题讨论】:

  • 需要确保一个存储字符串的区域。
  • 另外,请注意不能修改常量字符串的值。

标签: c segmentation-fault scanf


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    问题不在于您的文件指针;问题是你的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
    }
    

    【讨论】:

      【解决方案3】:

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

      即一个数组 - 试试

       char data[100];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-01
        • 2018-07-29
        • 1970-01-01
        • 2014-01-10
        相关资源
        最近更新 更多