[问题]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