c中相同代码的不同答案

Different answers for same code in c

这段代码发生了什么?

#include <stdio.h>

int main(){
    int e;
    printf("%d ", e);
    printf("%s", e);
    return 0;
}

e会有吗 a) 垃圾值? b) 空

在 GCC 中它显示垃圾值,在 g++ 中它显示 0 和 NULL。 谢谢!!

此程序调用了未定义的行为。您在第二个 printf 语句中为 int 数据类型使用了错误的格式说明符。不要指望有什么好处。另请注意 e 未初始化且其值不确定。

这两个语句都会调用未定义的行为,因为 e 对象未初始化,因此它的值是不确定的。

第二个语句也有错误的转换说明符,%s 规范需要一个 char * 参数。

所以正如评论中有人提到的那样,正确答案既不是 a) 也不是 b),而是 c) 恶魔飞出你的鼻子

此程序编译时生成警告:

警告:格式“%s”需要类型为“char”的参数,但参数 2 的类型为“int”[-Wformat=] printf("%s", e);*

并且在这两种情况下它都会生成垃圾值。

gcc :

g++ :