void* memset(void *s,int c,size_t n)
作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。


比如:

一、char strtmp[100]; memset(strtmp,0,100);

二、struct sample_struct

{
char csName[16];
int iSeq;
int iType;
};
struct sample_strcut stTest;
一般情况下,清空stTest的方法:
stTest.csName[0]='/0';
stTest.iSeq=0;
stTest.iType=0;
用memset就非常方便:

memset(&stTest,0,sizeof(struct sample_struct));

三、使用陷阱

memset函数是基于bitwise原则的,当要进行操作的对象违反此原则的话,致命的bug将出现。

比如:

class Ctest

{

public:

virtual int getsub();

private:

int a;

int b;

}

Ctest  t_a;

memset(&t_a,0,sizeof(Ctest));

这个操作将破坏t_a对象原来的内存数据,导致编译器自动产生的vtbl 值被修改掉;

memcpy也存在同样的问题;