该计划如下:
#include<stdio.h>
int main()
{
int a[7]={1,2,3,4};
printf("%d%d%d%d%d",(*a),*(&*a),a[*a*0],*a);
return 0;
}
codepad.org上的输出如下: 11110
ideone.com上的输出如下: 1111-1074526944 其中-1074526944每次执行都不变
我在我个人的gcc输出上执行了它:11110 我没有最新的gcc
在printf();
声明中,我并不关心前四个%d
,因为它非常明显。
它是我关心的第五个 %d
。为什么会提供这样的输出?
答案 0 :(得分:9)
它尝试访问在假定的“第五个参数”的偏移处对printf()的调用堆栈中发生的任何数据,你对该函数的调用显然没有提供。
-Wall
参数,该参数会告诉您:$ gcc -Wall main.c main.c: In function ‘main’: main.c:5:4: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]