作者mark182908 (mark)
看板C_and_CPP
標題[問題]C語言用VS寫HEXstring_to_BIN出現run time問題
時間Fri Feb 12 16:11:20 2016
開發平台(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