memset的作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
一般形式:memset(数组名,数据(填asiic码或 ‘ n’或false,true 的形式),字节总数) 或 memset(数组名,数据,n*sizeof(数据类型)) 建议用第二种,因为每种计算机的数据类型所占的字节数不一样;
memset可以方便的清空一个结构类型的变量或数组。
如: 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));
如果是数组: struct sample_struct TEST[10];
则 memset(TEST,0,sizeof(struct sample_struct)*10);
注意:
注意这个例子:
- #include<iostream>
- using namespace std;
- void main()
- {
- int i, a[20];
- memset(a,1,20*sizeof(int));
- for (i = 0;i<20;i++)
- cout << a[i] <<endl;
- system("pause");
- }
认为memset(a, 1, sizeof(a))后数组中的所有元素全为1了,但是为什么没有变成像我们想的那样?因为memset函数是按一个字节一个字节来赋值的。每个都用ASCⅡ为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起是0000 0001,0000 0001,0000 0001,0000 0001,转化成十六进制就是0x01010101,就等于16843009
当数据类型是 char的时候,就可以
#include<iostream>
#include <cstring>
using namespace std;
int main()
{
int i;
char a[20];
memset(a,'1',20*sizeof(char));
for (i = 0;i<20;i++)
cout << a[i] <<endl;
return 0;
}
输出结果全为1;