1

我刚开始使用 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 , &input) 接受来自键盘的 1 次击键,所以这不是我想要的。但是,谢谢你的回复

4

2 回答 2

6

问题

%d是整数输入的格式说明符,导致编译器假定 &input 指向整数而不是字符。

scanf( "%d", &input);

应该

scanf( "%c", &input);

为什么这会破坏堆栈

堆栈损坏的原因是输入是在堆栈上分配的,而 scanf 假设它占用 4 个字节(在 32 位平台上)而不是实际分配在堆栈上的 1 个字节。结果,堆栈上的其他内容(其他变量,返回地址,...)被覆盖。

于 2012-07-31T22:33:07.717 回答
1

中的%d格式说明符scanf()需要指向int变量的指针,而不是指向char. 尝试:

int input;
scanf( "%d", &input);
于 2012-07-31T22:32:42.210 回答