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

作者: mark182908 (mark)   2016-02-12 16:11:20
開發平台(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):
作者: stupid0319 (徵女友)   2016-02-12 17:05:00
str_size+2 -> str_size+3 這樣改呢?
作者: wulouise (在線上!=在電腦前)   2016-02-13 01:31:00
把string放大一點,打開來看是不是有\0scanf應該會自動塞\0 然後多了0x12345678\0有11個 爆了?
作者: LPH66 (-6.2598534e+18f)   2016-02-14 21:20:00
所以才要再多 1
作者: stupid0319 (徵女友)   2016-02-14 22:32:00
如果是str_size+3的話,輸入0x1234567812,應該不會報錯程式有記憶體對齊的特性,可以Google了解一下所以在分配char記憶體時,最好用4的倍數
作者: CoNsTaR ((const *))   2016-02-15 15:57:00
__Alignof 也很重要
作者: wulouise (在線上!=在電腦前)   2016-02-28 23:43:00
scanf自動幫你補\0 所以你的字串buffer必須多+1以免爆炸

Links booklink

Contact Us: admin [ a t ] ucptt.com