您的位置:首页 > 运维架构 > Linux

linux中memset的正确用法

2015-10-14 21:35 701 查看

1. 定义

#include<string.h>
//The  memset()  function  fills  the  first  n  bytes of the memory area  pointed to by s with the constant byte c.
//即对各种类型的数组进行初始化,避免野值,注意是按字节填充
void *memset(void *s, int c, size_t n);


2. 示例

//正确
char arr[10];
memset(arr,'a',10);   // 由于char只占一个字节(byte),因此函数的结果是将连续的10个字节都填充为'a'。

//错误
int arr[10];
memset(arr,1,10);


原因:

(1)int占4个字节(byte),因此”1”对应的二进制(32bits下)为”00000000 00000000 00000000 00000001”(4bytes),塞到1byte(8bit)的中,高位被舍弃了。这样,填入数组中的值是”00000001”。

然而总共有10 * 4 = 40byte,却只有10个byte被填充,因此结果是”00000001……00000001**********”(前面总共10个”00000001”)。

因此,第一个数是”0x01010101”=16843009(10进制),数组其余部分的值则是随机值,读取出来会是很离谱的数!

(2)如果采用 memset(arr,1,sizeof(arr));

就是将数组的所有值都填充为”0x01010101”,也就是int数组的初始值变为了16843009 !

参考来源:

http://www.blog.csdn.net/whuslei (已失效)

http://www.cublog.cn/u1/49221/showart_422256.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C-C++