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++ :
这段代码发生了什么?
#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++ :