一、memset函数
标准库函数,用于将一块内存区域的每个字节设置为指定的值。
定义为void *memset(void *ptr,int value,size_t num);
其中,ptr
表示目标内存区域的起始地址;value
表示设置的值,常用整数表示,但在传给函数时自动转换为unsigned char类型;num
表示设置的字节数。
工作原理是将value复制到指定内存区域ptr所指向的每个字节中,重复复制num次。常用于将内存区域初始化为特定值,例如将整个数组清零int arr[10]; memset(arr,0,sizeof(arr));
。
注意:该函数以字节为基本操作单位复制数值,对于非char型的数组,设置的值可能会被截断,或产生不可预测的结果;该函数没有边界检查,容易导致越界操作或非法访问内存。
二、memcpy函数
标准库函数,用于在内存之间进行字节级别的数据拷贝。
定义为void *memcpy(void *dest,const void *src,size_t num);
其中,dest
表示目标内存区域的起始地址;src
表示原内存区域的起始地址;num
表示要复制的字节数。
工作原理是将原内存区域中的num个字节的数据复制到目标内存区域,可能包含原先的内容。例如将原字符串src复制到目标字符数组dest中的源代码如下:
char src[] = "Hello,world!";
char dest[20];
memcpy(dest,src,strlen(src)+1);
printf("Copied string:%s\n",dest);
运行后代码如下:
Copied string:Hello,world!
上述代码要复制的字节数使用strlen(src)+1
,确保整个字符串被复制到目标数组中,包括字符串的结尾符'\0'
。