memset函数作用:
初始化,将指针所指向的一大块连续内存设置成一个指定的数值。
一般使用情景:定义了一个变量后,将其初始化。可以对数组、结构、等初始化,比for方便快捷。
struct sigaction sa;
memset(&sa,0,sizeof(struct sigaction));
1
2
该函数语法:
void * memset ( void * ptr, int value, size_t num );
ptr指的是指向内存块的指针。value指的是内存块被设定的数值的大小。size_t num指的是内存块的大小。
头文件引用:
引用头文件:
#inlcude<string.h>
注意:
对数组a[]进行初始化时,表达式memset(a,0,size)中的size指的是数组所占内存的大小,而不是数组中元素的个数。
下面这个是错误的示例:
#include<string.h>
#include
using namespace std;
int main()
{
int a[]={1,2,3,4} ;
int n=sizeof(a)/sizeof(int );
//initial the array
memset(a,0,n);
//print the array
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
1
}
错误示例的输出:
0,2,3,4
它并没有将所有的项都初始化,只对第一个数进行了初始化。应为int类型所分配的空间是4字节。
**
memcpy函数原型
**
void *memcpy(void *destin, void *source, unsigned n);
参数
destin-- 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。
source-- 指向要复制的数据源,类型强制转换为 void* 指针。
n-- 要被复制的字节数。
返回值
该函数返回一个指向目标存储区destin的指针。
改装:原来返回指针指向destin[0],改成指向destin[n],而destin最后一个字符是destin[n-1]
#define ngx_cpymem(dst, src, n) (((u_char *) memcpy(dst, src, n)) + (n)) //注意#define写法,n这里用()包着,防止出现什么错误
例如:
u_char errstr[NGX_MAX_ERROR_STR+1];
p = ngx_cpymem(errstr, "nginx: ", 7); //p指 向"nginx: "之后