【发布时间】:2022-06-22 21:23:27
【问题描述】:
#include <stdio.h>
int main () {
int vIn_a, vIn_b, vIn_c;
char vOperator;
printf("Please enter a number\n");
scanf("%d", vIn_a);
printf("Please enter a number\n");
scanf("%d", vIn_b);
printf("Please enter a Operator\n");
scanf("%c", vOperator);
switch(vOperator){
case '+':
vIn_c = (vIn_a + vIn_b);
break;
case '-':
vIn_c = (vIn_a - vIn_b);
break;
case '/':
vIn_c = (vIn_a / vIn_b);
break;
case '*':
vIn_c = (vIn_a * vIn_b);
break;
}
printf("Result: %d %c %d = %d", vIn_a, vOperator, vIn_b, vIn_c);
return 0;
}
只是想弄清楚这一点,我运行了 gdb。但不确定我的调试器此时告诉我什么。也许我忽略了它? 调试器:程序收到信号 SIGSEGV,分段错误。 0x00007ffff7c60d36 在?? () 来自 /usr/lib/libc.so.6
那么是什么导致了这个分段错误呢?我正在学习 C,但我迷路了。
提前致谢。
【问题讨论】:
-
用调试符号编译代码。在
gdb中运行它。失败时,执行bt命令。bt命令会显示效果。根本原因可能是直接的(堆栈中最顶层的调用者),也可能是导致直接影响的其他原因。 -
您将错误类型的参数传递给
scanf。它需要变量的地址,即&vIn_a、&vIn_b和&vOperator。您还需要将scanf调用中的"%c"更改为" %c",以便它可以占用运算符字符之前的任何空格。 -
@JeffHolt 不,第一步是在编译器中启用警告。