|
今天在写程序的时候翻蠢写出了memset(a,1,sizeof(1))的代码,一直找不到错误在哪.后来输出中间结果发现数组并没有被初始化成为1,寻找原因,原来是因为被初始化成为了0x0101,并没有被初始化成为1.现总结一波Memset的常用的用法。
1.初始化字符数组,如下
char c[10];
memset(c,0,sizeof(c));
memset(c,1,sizeof(c));
2.初始化int类型数组,如下
int a[10];
memset(c,0,sizeof(c));
memset(c,-1,sizeof(c));
memset(c,1,sizeof(c));//错误用法 3.
初始化结构体,如下
struct Test{
int a;
int b;
};
struct Test t;
memset(&t,0,sizeof(t));
4.初始化含有指针的结构体时可能会造成内存泄露,如:
struct Test{
int a;
int* b;
}
struct Test t;
t.b=(int*)malloc(sizeof(int)*10);
memset(&t,0,sizeof(t));
这样初始化并不会初始化数组b的每个成员,只会将b初始化为0,而b已经分配了内存,会造成内存泄露
综合来说,memset是以字节为单位分配内存,这样比我们手动初始化快的多,但是要注意一些易错的地方。 |