[問題] printf( "%n" , &y ) 的問題

看板C_and_CPP (C/C++)作者 (tiny legend)時間10年前 (2015/06/18 23:19), 10年前編輯推噓4(4010)
留言14則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Dev C++ 問題(Question): printf() function 裡的 %n 是否是 compiler depend ?? 小弟手邊目前只有這個 compiler ... 預期的正確結果(Expected Output): 123 : 5 錯誤結果(Wrong Output): 123 : 44 程式碼(Code):(請善用置底文網頁, 記得排版) int i = 44; printf( "123 :%n", &i ); printf( " %d\n", i ); -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.173.29.24 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1434640777.A.497.html

06/18 23:31, , 1F
我不確定是怎麼樣不過這個功能很容易產生漏洞
06/18 23:31, 1F

06/18 23:31, , 2F
建議忘了它吧
06/18 23:31, 2F
好的 XD

06/19 00:30, , 3F
%n是C標準有規範的 請見C11 7.21.6.1 - fprintf
06/19 00:30, 3F

06/19 00:35, , 4F
至於為啥你的編譯器會跑出44就是另外一件事情了...
06/19 00:35, 4F
( 請問 C11 是不是指 ISO C++ 11 ) 其實我覺得這個功能頗好用的, 無奈 :(

06/19 04:10, , 5F
如果是寫 printf("123 :%n %d", &i, i); 那確實可能跑出 44
06/19 04:10, 5F

06/19 04:11, , 6F
真的有分行寫的話那應該要出現 5
06/19 04:11, 6F

06/19 04:12, , 7F
(應該說寫上上行則一定跑出 44, 因為有函式呼叫擋在中間)
06/19 04:12, 7F
嗯嗯嗯, 函式擋住, 了解. 如果我寫同一行, 結果是很怪的 %n 後面全都沒了, 不過我是寫這樣 printf( "123 :%n456\n", &i ); 只會印出 123 : ※ 編輯: lj0113 (1.173.29.24), 06/19/2015 06:55:15

06/19 15:48, , 8F
C11就是2011年發布的C語言標準 不過查了一下%n從C89就有了
06/19 15:48, 8F

06/19 22:20, , 9F
好 謝P大 窩去看看
06/19 22:20, 9F

06/20 16:41, , 10F
應該是你的 DEV C++ 所叫用的 compiler 有 bug 吧.
06/20 16:41, 10F

06/21 12:08, , 11F
跟compiler無關... 只跟lib的版本有關...
06/21 12:08, 11F

06/21 13:57, , 12F
樓上說得是. 就此問題, 的確lib有問題的可能性極高,
06/21 13:57, 12F

06/21 14:01, , 13F
但也遇過gcc和lib版本不搭配的問題,
06/21 14:01, 13F

06/21 14:02, , 14F
或不同編譯選項造成不同結果...
06/21 14:02, 14F
了解, 這樣聽起來感覺有經驗踩過這個洞的才知道 XD 謝樓上兩位大 :) ※ 編輯: lj0113 (1.173.27.181), 06/22/2015 20:47:56
文章代碼(AID): #1LWk69IN (C_and_CPP)
文章代碼(AID): #1LWk69IN (C_and_CPP)