memset()使用方法 和注意事项

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);


注意:

注意这个例子:

  1. #include<iostream>  
  2. using namespace std;  
  3. void main()  
  4. {  
  5.     int i, a[20];  
  6.     memset(a,1,20*sizeof(int));  
  7.     for (i = 0;i<20;i++)  
  8.         cout << a[i] <<endl;  
  9.     system("pause");  
  10. }    

  

认为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;

猜你喜欢

转载自blog.csdn.net/qq_41199502/article/details/79544742
今日推荐