memset();

原型: void *memset(void *s, int ch, size_t n);

含义:   将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作;

           其返回值为指向S的指针。

注意:   其是按照字节顺序(大小为n字节)进行赋值的,跟具体类型无关;

int num[8];

我们用memset给num初始化为{1,1,1,1,1,1,1,1},memset(num,1,8);//这样是不对的

错误点1:一个int是4个字节的,8个int是32个字节,所以首先要赋值的长度就不应该为8而是32。

 

错误点2:因为memset是 逐字节 拷贝,以num为首地址的8字节空间都被赋值为1,即一个int变为0X00000001 00000001 00000001 00000001,显然,把这个数化为十进制不会等于1的。

所以,在memset使用时要千万小心,在给char以外的数组赋值时,最好只用来初始化为0(0x00)。

 

memcpy();

原型:   void *memcpy( void *dest, const void *src, size_t n );

含义:   从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

1.source和destin所指内存区域不能重叠,函数返回指向destin的指针。