1

程序如下:

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

4

1 回答 1

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]
于 2012-06-09T18:23:54.633 回答