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完成站点地址更改后。
答案 0 :(得分:1)
如果(实际上,我知道这是非法声明,但仅用于说明):
char* tempQuestion.header;
然后在写入header
之前,必须指向有效的内存,否则行为未定义,可能是feof
见证行为的原因。在使用malloc
之前更正header
sscanf
的足够内存。
同样,如果strstr
返回NULL
怎么办?这将被传递给sscanf
,这将取消引用它,导致未定义的行为(再次)。
要点:
header
指向有效内存strstr
不返回NULL