此代码中会发生什么?
#include <stdio.h>
int main(){
int e;
printf("%d ", e);
printf("%s", e);
return 0;
}
是否会有 a)垃圾值? b)NULL
在GCC中它显示垃圾值,在g ++中它显示0和NULL。 谢谢!
答案 0 :(得分:5)
该程序调用未定义的行为。您在第二个int
语句中使用了printf
数据类型的错误格式说明符。不要指望任何好处。另请注意,e
未初始化且其值不确定。
答案 1 :(得分:5)
两个语句都调用未定义的行为,因为e
对象未初始化,因此其值是不确定的。
第二个语句也有错误的转换说明符,%s
规范需要char *
参数。
正如评论中提到的那样,正确答案既不是a)也不是b)而是c)恶魔飞出你的鼻子。
答案 2 :(得分:0)
此程序在编译时生成警告:
警告:格式'%s'需要类型为'char '的参数,但参数2的类型为'int'[-Wformat =] printf(&#34;%s&#34;,e); *
在这两种情况下都会产生垃圾值。
gcc:
g ++ :