变量'input'周围的堆栈已损坏

时间:2012-07-31 22:31:19

标签: c

我刚开始使用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次击键,这不是我想要的。但是,谢谢你的回复

2 个答案:

答案 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);