gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:26:17 24 4
gpt4 key购买 nike

程序如下:

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

最佳答案

它会尝试访问 printf() 调用堆栈中碰巧位于假定“第五个参数”所在偏移处的任何数据,而您对该函数的调用显然没有提供。

  • 要感受它,请学习如何编写可变参数函数
  • 要真正理解它,您必须学习汇编。
  • 为避免此类编程错误,请使用 -Wall 参数,它会告诉您:
$ gcc -Wall main.c 
main.c: In function ‘main’:
main.c:5:4: warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat]

关于C 编程 %d { printf ("%d"); },我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10963466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com