【发布时间】:2019-10-27 10:30:28
【问题描述】:
我写了以下代码:
#include <stdio.h>
int main (void){
int a;
int b;
/* scan first number*/
printf("number 1: ");
scanf("%d", &a);
/* scan second number*/
printf("number 2: ");
scanf("%d", &b);
int c = a + b;
printf("%d + %d = %d",a,b,c);
return 0;
}
它编译成功,我可以运行程序,但是在第二个“scanf”之后它在“printf("%d * %d = %d",a,b,c);”出现之前就崩溃了。
我使用 Visual Studio Code 和 gc 编译器 (gcc)。
【问题讨论】:
-
用什么输入会崩溃?另外
int c = a + b;太早了,因为此时a和b都没有被初始化。 -
int c = a + b;这个指令会导致undefined behaiour。您正在使用变量a和b在它们被初始化之前。 在您实际读取变量之后移动此语句。 -
你应该在接收到它们的值后添加a和b。
-
查看scanf的返回值:
if (scanf("%d", &b) != 1) { fprintf(stderr, "bad input for scanf\n"): exit(EXIT_FAILURE); }