0xcd(205)问题

昨天调试SLanAgent时碰到一个很奇怪的问题。

SLanServer和SLanAgent都用Debug版运行,取得Agent的各种数据,一直跑得很好。但是用python写了一个测试程序, 从SLanAgent取得OSInfo,在解析OSVersion和OSMend时一直出错。SLanAgent是采用utf-8传输字符串的。 python中取得字符串后也使用utf-8解析了,但是python就是报错,说有些byte无法被decode。

调试SLanAgent之后,发现转换成utf-8传输时,如果传一个100字节的数组,但里面的内容不足100字节,那么多余那些类容会被填充为 0xcd(也就是205),奇怪,从来没有使用0xcd这个数字啊,字符串的结束符不应该是0x0吗?为什么无故变成0xcd了呢,这个0xcd又是怎么 来的呢。

上网查了之后发现,0xcd是被vc的debug版自动加上去的,对于一个分配了空间但是没有初始化的char数组,在调试版的时候,vc会把所有的字节初始化为0xcd(cd表示clear data),表示没被初始化过,这样放可以防止某些时候报错。

问题清楚了,解决起来也很容易,在用new分配空间的时候,分配完之后立即用memset对这段空间进行初始化,这下就不再出问题了。

btw:虽然这个0xcd在python下出错了,但是在SLanServer一直没出现问题,并且对于以0x25结尾的字符 串,MultiByteToWideChar这个函数也不会把一连串的0xcd当作真正的字符进行解析,这个MultiByteToWideChar也挺 奇怪啊。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值