我刚开始使用C语言,我遇到了这个错误。我尝试在线查找,但其他线程包含我不熟悉的ARRAY。
#include<stdio.h>
int main(void){
char input;
printf("ASCII testing\n");
scanf( "%d", &input); //the error occurs here but would like to know the solution
printf("answer is : %c\n" , input);
system("pause");
return 0;
}
“运行时检查失败#2 - 变量'输入'周围的堆栈已损坏。”
非常感谢简单的指出
//被修改
好吧我想输入值“66”,结果就是B. scanf(“%c,&amp; input”)接受键盘上的1次击键,这不是我想要的。但是,谢谢你的回复
答案 0 :(得分:6)
问题
%d
是整数输入的格式说明符,导致编译器假设&amp; input指向整数而不是字符。
scanf( "%d", &input);
应该是
scanf( "%c", &input);
为什么会破坏堆栈
堆栈损坏的原因是输入在堆栈上分配,而scanf假定它占用4个字节(在32位平台上)而不是堆栈上实际分配的1个字节。因此,堆栈上的其他内容(其他变量,返回地址,...)将被覆盖。
答案 1 :(得分:1)
%d
中的scanf()
格式说明符需要指向int
变量的指针,而不是指向char
的指针。尝试:
int input;
scanf( "%d", &input);