c中相同代码的不同答案

时间:2015-01-25 10:59:04

标签: c gcc g++

此代码中会发生什么?

#include <stdio.h>

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

是否会有 a)垃圾值? b)NULL

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

3 个答案:

答案 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:

enter image description here

g ++

enter image description here