memset使用的一个错误

一般喜欢用memset来初始化一个内存块。所以在使用的时候可能操作如下
int  buffer[ 256 ];
memset(buffer,
0 , sizeof (buffer));
这是正确的
但是如果
     int  f[ 256 ];
    memset(f,
1 , sizeof (f ));
得到的结果不是f[0] = 1,而是f[0] = 16843009,注意因为memset的第一个参数是void* 所以是在8位上操作。f[0]实际填充表示为2进制为00000001000000010000000100000001也就是16843009。
int  f[ 256 ];
memset(f,
256 , sizeof (f));
因为char是会裁剪的,256的2进制为1 00000000 00000000,所以效果和memset(f,0,sizeof(0));一样的
(发句牢骚,为什么是在8bit上操作。第二个参数不使用char而使用int.....真是不明白这个api定义的时候为什么!)
所以memset填充一般用于char*。具体见下面的文章
memset用法详解
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值