关于memset使用的一点小插曲

        最近在工作中与客户公司的开发人员进行开发交流时遇到了一个简单的小问题,觉得有必要记录下来。
        问题说来其实很简单,如下一句代码:
        memset (buff, 0x8000, 300*300);
        将0x8000值写入buff指向的内存中,即从buff的起始地址开始,依次填入300*300个0x8000。
        客户公司的开发人员用这句代码生成的程序没有出现他们预期的效果,于是找到我问为什么(我在以前提供给他们一个实现相同功能的库函数),我看了之后告诉他们这句代码有错误,可是他们一直没有想明白。
        其实错误很的原因就在于他们没有搞清楚memset函数用法的实质,memset是一个对内存进行单字节操作的函数,它对内存区域进行赋值时是按照一个字节一个字节进行的,所以它只会把0x8000的低字节赋给每个字节。因此,上面的代码执行后,内存区域的值是:
        0x00 0x00 0x00…………………………
        而不是他们期望的:
        0x8000 0x8000 0x8000……………………
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值