Wednesday, March 7, 2012

位置轉換 printf("%f",5);的問題

#inlcude
int main()
{
printf("%f",5);
printf("%d",5.01);
}

首先參數5為int型別,32位元平臺中為4位元組,因此在stack中分配4位元組的記憶
體,用於存放參數5。
然後printf根據說明符"%f",認為參數應該是個double型別(在printf函式中,float會自
動轉換成double),因此從stack中讀了8個位元組。
很顯然,記憶體存取越界,會發生什麼情況不可預料。如果在printf或者scanf中指定了"%f"
,那麼在後面的參數列表中也應該指定一個浮點數,或者一個指向浮點變數的指標,否則不應載
入支援浮點數的函式。

於是("%f",5)有問題,而("%f",5.0)則可行。


答案:
第一個答案是0.000000
第二個答案是一個大數



.

No comments:

Post a Comment