(C)使用feof时发生奇怪的崩溃

时间:2013-05-25 17:20:39

标签: c file crash cstring

    char *headerString = strstr(line, "...\">");
    printf("%d", feof(site));                                   //all is ok
    sscanf(headerString, "...\">%[^<]", tempQuestion.header);
    printf("%d", feof(site));                                   //crash

我很困惑为什么它会崩溃。我的意思是,sscanf对FILE *网站没有做任何事情,为什么会崩溃呢?

编辑: tempQuestion.header是(char *)。你还想知道什么?这一部分的一切都很好。我想,我得到访问冲突错误然后程序崩溃。使用调试器我发现在sscanf完成站点地址更改后。

1 个答案:

答案 0 :(得分:1)

如果(实际上,我知道这是非法声明,但仅用于说明):

char* tempQuestion.header;

然后在写入header之前,必须指向有效的内存,否则行为未定义,可能是feof见证行为的原因。在使用malloc之前更正header sscanf的足够内存。

同样,如果strstr返回NULL怎么办?这将被传递给sscanf,这将取消引用它,导致未定义的行为(再次)。

要点:

  • 确保header指向有效内存
  • 确保strstr不返回NULL