C编程%d {printf("%d"); }

Tan*_*sai 1 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;
}
Run Code Online (Sandbox Code Playgroud)

codepad.org上的输出如下:11110

ideone.com上的输出如下:1111-1074526944 其中-1074526944每次执行都会变化

我在我的个人gcc输出上执行它是:11110 我没有最新的gcc

printf();声明中我不关心前四个%d因为它完全显而易见.这是我关注的第五个 %d问题.为什么会提供这样的输出?

Fla*_*ius 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]
Run Code Online (Sandbox Code Playgroud)