memset()函数详解

1、头文件

    C中为<memory.h> 或 <string.h>

     C++中为<cstring>

2、原型及作用
void *memset(void *s,int c,size_t n)

    其中,s是一个指针或数组,c是赋给s的值,n是将修改的s的长度,即s的前n个字节。

    作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。

3、常用

    常用于清空一个结构体类型的变量或数组,例如清空一个结构体:

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

   也常用于malloc申请一段内存后,对内存的初始化:

double* wid = (double*)malloc((num+1) *sizeof(double));
if (wid == NULL)  
{  
    cout << "Fail to allocate memory to wid" << endl;  
    exit(1);  
}  
memset(wid, 0, (num + 1) *sizeof(double));//初始化为0
 4、注意

    memset这个函数的作用是将数字以单个字节逐个拷贝的方式放到指定的内存中去

    (1) 若ptr指向char型地址,value可为任意字符值;

    (2) 若ptr指向非char型,如int型地址,要想赋值正确,value的值只能是-1或0,因为-1和0转化成二进制后每一位都是一样的,设int型占4个字节,则-1=0XFFFFFFFF, 0=0X00000000。

参考:赋值过程讲解

   例子详解



猜你喜欢

转载自blog.csdn.net/wangyang20170901/article/details/80064912