当我错误地遗漏了 scanf() 函数的第二个参数时,程序仍然编译并运行,但可执行文件遇到以下错误:“APPCRASH”,异常代码为“c0000005”(这意味着存在内存访问冲突 AFAIK )。我做了一些实验,当调用 scanf() 的函数超出范围时,似乎总是发生崩溃,但我已经意识到它在实际调用中发生的更多。例子:
void afunction (void) {
printf("This works fine!");
scanf("%c"); /* NOTE the second parameter omission */
printf("This showed up a few times, misleading me");
}
我现在有三个问题:
1)为什么编译器不会编译代码失败?它甚至没有警告我!
2) scanf() 现在是否正在尝试写入内存地址 NULL?例如:scanf("%c", NULL)
3)为什么/如何在失败的 scanf() 语句下执行任何操作?
附加信息:
平台:Windows
编译器:GCC
IDE:代码::块