看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) [6~ VS Community 2015/C 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) stdio.h, string.h 問題(Question): 小弟我練習寫一個從string型態的十六進位數字(32-bit)轉成binary的函式, 0x/0X可有可無,且可不必輸滿8個十六進位數字,在不餵入0x/0X的狀況下可正常執行, 但是在有0x/0X且輸入滿8個HEX的狀況時,會出現Run-time check failure例外警告, 拜託各位大神幫忙了~ 餵入的資料(Input): 0x12345678 預期的正確結果(Expected Output): 結果正確,不過會有例外警告 錯誤結果(Wrong Output): Run-Time Check Failure #2 - Stack around the variable 'string' was corrupted. 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/cfYkLA 補充說明(Supplement): 無 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.41.15.240 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1455264683.A.D29.html
stupid0319: str_size+2 -> str_size+3 這樣改呢? 02/12 17:05
可以了謝謝大大的幫忙!
wulouise: 把string放大一點,打開來看是不是有\002/13 01:31
wulouise: scanf應該會自動塞\0 然後多了0x12345678\0有11個 爆了?02/13 01:32
大大我測試了把string放大跟沒放大比較,後面都有\0 ※ 編輯: mark182908 (114.41.15.240), 02/14/2016 20:13:52
LPH66: 所以才要再多 102/14 21:20
請問LPH大,所以意思是要使用scanf字串都要多預留1個位置嗎?
stupid0319: 如果是str_size+3的話,輸入0x1234567812,應該不會報錯02/14 22:32
stupid0319: 程式有記憶體對齊的特性,可以Google了解一下02/14 22:34
stupid0319: 所以在分配char記憶體時,最好用4的倍數02/14 22:37
謝謝s大受教了 ※ 編輯: mark182908 (114.41.15.240), 02/15/2016 12:45:40
CoNsTaR: __Alignof 也很重要 02/15 15:57
wulouise: scanf自動幫你補\0 所以你的字串buffer必須多+1以免爆炸 02/28 23:43