[問題]C語言 寫HEXstring轉Binary出現run tim

看板C_and_CPP作者 (mark)時間9年前發表 (2016/02/12 08:11), 9年前編輯推噓6(603)
留言9則, 4人參與, 最新討論串1/1
開發平台(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

02/12 17:05, , 1F
str_size+2 -> str_size+3 這樣改呢?
02/12 17:05, 1F
可以了謝謝大大的幫忙!

02/13 01:31, , 2F
把string放大一點,打開來看是不是有\0
02/13 01:31, 2F

02/13 01:32, , 3F
scanf應該會自動塞\0 然後多了0x12345678\0有11個 爆了?
02/13 01:32, 3F
大大我測試了把string放大跟沒放大比較,後面都有\0 ※ 編輯: mark182908 (114.41.15.240), 02/14/2016 20:13:52

02/14 21:20, , 4F
所以才要再多 1
02/14 21:20, 4F
請問LPH大,所以意思是要使用scanf字串都要多預留1個位置嗎?

02/14 22:32, , 5F
如果是str_size+3的話,輸入0x1234567812,應該不會報錯
02/14 22:32, 5F

02/14 22:34, , 6F
程式有記憶體對齊的特性,可以Google了解一下
02/14 22:34, 6F

02/14 22:37, , 7F
所以在分配char記憶體時,最好用4的倍數
02/14 22:37, 7F
謝謝s大受教了 ※ 編輯: mark182908 (114.41.15.240), 02/15/2016 12:45:40

02/15 15:57, , 8F
__Alignof 也很重要
02/15 15:57, 8F

02/28 23:43, , 9F
scanf自動幫你補\0 所以你的字串buffer必須多+1以免爆炸
02/28 23:43, 9F
文章代碼(AID): #1MlPEhqf (C_and_CPP)