簡體   English   中英

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

[英]C programming %d { printf(“%d”); }

該程序如下:

#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] 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM