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 - 変数 'input' の周りのスタックが壊れていました。」

簡単な指摘は大歓迎です

//編集済み

さて、結果がBになるように値「66」を入力したいと思います。scanf("%c , &input)はキーボードからの1回のキーストロークを受け入れるので、それは私が探しているものではありません。それでも、返信ありがとうございます

4

2 に答える 2

6

問題

%dは整数入力の書式指定子であり、コンパイラは &input が文字ではなく整数を指していると想定します。

scanf( "%d", &input);

する必要があります

scanf( "%c", &input);

これによりスタックが破損する理由

スタックが破損する理由は、入力がスタックに割り当てられ、scanf が (32 ビット プラットフォームでは) スタックに実際に割り当てられた 1 バイトではなく 4 バイトを占有していると想定しているためです。その結果、スタック上の他のもの (他の変数、戻りアドレスなど) が上書きされます。

于 2012-07-31T22:33:07.717 に答える
1

%d書式指定子には、へのポインターではなく、変数scanf()へのポインターが必要です。試す:intchar

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