繁体   English   中英

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

[英](C) Strange crash when using feof

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

我完全困惑为什么会崩溃。 我的意思是,sscanf对FILE * site不执行任何操作,为什么会崩溃?

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

如果(有效地,我知道这是非法声明,但仅用于说明):

char* tempQuestion.header;

然后,在写入header之前,它必须指向有效的内存,否则该行为是不确定的,并且可能是feof看到的行为的原因。 sscanf使用之前,要更正mallocheader足够的内存。

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

摘要:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM