为什么它会导致运行时错误,字符为int而不进行初始化?

Hyu*_*won 2 c++

首先,我为英语不好道歉.

在下一个简单的程序,

void fx(int *a){
    for(int i=*a; i<='Z'; i++)
    printf("%c", i);
}
int main(){
    int a;
    scanf("%c", &a);
    fx(&a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在运行时输入了大写字母,它导致了致命错误,并通过杀死进程解决了.

它在下一个代码中不会引起任何问题.

//except fx()
int main(){
    int a;
    scanf("%c", &a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

要么

//initialize int a
void fx(int *a){
    for(int i=*a; i<='Z'; i++)
    printf("%c", i);
}
int main(){
    **int a = 0;**
    scanf("%c", &a);
    fx(&a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我知道输入字符应该是'char'.但我无法理解上述情况.

发生了什么?

PS.我使用VS2010,c ++

Luc*_*ore 8

这个区别

int a;
scanf("%c", &a);
Run Code Online (Sandbox Code Playgroud)

还有这个

int a = 0;
scanf("%c", &a);
Run Code Online (Sandbox Code Playgroud)

int a;宣布未初始化a.所以它可以是任何东西.当你写作

scanf("%c", &a);
Run Code Online (Sandbox Code Playgroud)

在未初始化的情况下int,您只设置最高位,因为%c告诉scanf将输入写入a char,因此只会写入第一个字节.这可能会导致一些奇怪的行为,包括你刚才所说的.

  • 不要忘记字节序问题:`a`的前8位可能不代表最不重要的... (2认同)