memset赋值问题

http://www.cnblogs.com/caidaxia/archive/2011/11/21/2257241.html


关于memset的用法,

常用于对于较大的结构体或数组进行清零操作//注意,是清零操作,如果进行统一赋值,要谨慎。

void *memset(    void *dest,    int c, size_t count );

函数将dest所指向的内存块全部以字节为单位,用c进行填充,函数第三个参数指定内存块的大小。

char a[20];
memset (a,0, sizeof (a));

 上述代码将a中的字符全部以0填充。

对于清零初始化,一般不用出现错误使用,但是在一些统一赋初值的运算中,就有可能会出现下述错误情况。

int a[5]; 
memset (a,1, sizeof (a));
//这里改成memset(a,1,5 *sizeof(int))也是不可以的   
for ( int i = 0;i < 5;i++) 
cout<<a[i]<< " " ;

  a中所有元素的值将为16843009。

这是因为,memset是以字节为单位以指定值对内存填充,由于int型在一般机器上都占4为,因此每个整型被填充的值为0x01010101即为十进制的16843009

 

结论:使用memset对整型等进行赋值时要考虑清楚,注意memset的填充原理。

当然,memset在用于对char型以指定字符填充的运算中很难出现这些问题,因为char本来就只占一个字节。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值