看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《raincole (冷雨)》之銘言: : 我想請問的是printf中%d和%f的事實上是如何作用的。 : 例如說printf("%s");會記憶體錯誤,但printf("%d");只是輸出一個垃圾值, : 是什麼原因造成這種差別? printf 有很多參數 第一個是格式 "%s" or "%d" ... 然後後面一個一個是要印出來的值 當你沒有指定的時候 也不知道他是去stack還是哪裡讀得參數... 那如果讀到1000,他就印出數字1000 或是,他就去記憶體位址1000的地方找字串來印... 問題是那個位址不一定是有效的位址...所以就出錯了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.74.186.18
raincole:我就是問他到底會去哪裡讀參數..?還是沒規範? 12/21 19:56
raincole:我猜讀字串他會一直讀直到找到\0而記憶體錯誤 12/21 19:57
raincole:但是%d呢? 12/21 19:57
MOONRAKER:從自己的堆疊區裡面取值出來,指到哪裡就是哪裡。 12/21 20:12
jlovet:va_list,va_args,... 12/21 20:23
raincole:所謂「堆疊區」代表是已宣告的記憶體?所以不會出錯? 12/22 00:12
LPH66:應該說它預期在那裡要有一個值告訴他資料是什麼 12/22 05:12
LPH66:這個「那裡」(你想問的) 就是你傳參數時參數放在的位置 12/22 05:13
LPH66:那裡由於是個堆疊 故也叫堆疊區 12/22 05:13