我遇到这样的问题:
Q值。从这里选择任何错误:
int main(void) { int a; printf("Input a integer number >>"); scanf("%d\n", a); printf("The input number is %d\n", a); return 0; }
- 语法错误
- 逻辑错误
- 运行时错误
- 没有错误
醇>
我认为这是语法和运行时错误,因为:
&
前面没有a
。scanf()
语句,因为没有&
。然而,有人告诉我,我错了。
我知道这不是逻辑错误,但我很困惑哪一个是哪个。
答案 0 :(得分:1)
不,这里不会有任何语法错误,只有运行时错误。
scanf()
期望指向变量的指针存储值,但这并不强制我们必须始终使用&
运算符来传递地址。
想象一下,如果a
成为指针(并分配了适当的内存),
scanf("%d\n", a);
本来是一个非常有效的陈述,不是吗?
在此代码中,您已将未初始化变量的值(作为地址,它将无效)作为{{{格式说明符为%d
,因此会调用导致运行时错误的undefined behavior。
答案 1 :(得分:1)
编译器检测到语法错误。这个程序编译得很好,因此它没有语法错误。
但是,此程序将未初始化的变量a
的值传递给scanf
,这是未定义的行为,即运行时错误。