浏览 6784 次
锁定老帖子 主题:memset函数用法及注意事项
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-23
最后修改:2009-03-26
memset 函数是内存赋值函数,用来给某一块内存空间进行赋值的。
其原型是:void* memset(void *_Dst, int _Val, size_t _Size);
使用时在文件头加上#include "stdlib.h" 。
_Dst是目标起始地址,_Val是要赋的值,_Size是要赋值的字节数 。 例1: char str[9]; 我们用memset给str初始化为“00000000”,用法如下 memset(str,0,8);
注意,memset是逐字节 拷贝的。 下面再看一个例子: 例2: int num[8]; 我们用memset给str初始化为{1,1,1,1,1,1,1,1}, memset(num,1,8);//这样是不对的 一个int是4个字节的,8个int是32个字节,所以首先要赋值的长度就不应该为8而是32。 因为memset是 逐字节 拷贝,以num为首地址的8字节空间都被赋值为1, 即一个int变为0X00000001 00000001 00000001 00000001,显然,把这个数化为十进制不会等于1的。 所以,在memset使用时要千万小心,在给char以外的数组赋值时,只能初始化为0或者-1。因为在计算机里,0的二进制都是0,-1的二进制都是1。 最近才发现memset的这个问题,之所以要写这篇文章,是因为我在自己的DES算法里多处用到了memset,而我当时却不知memset有这个问题,特此记下,引以为鉴。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |