C编程%d {printf(“%d”); }

时间:2012-06-09 18:21:07

标签: c printf

该计划如下:

#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。为什么会提供这样的输出?

1 个答案:

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