C语言当中,在string.h头文件中还定义了与内存相关的操作,这里讲一下,memset和memcpy函数。
1. memset
memset的函数原型为:
void *memset(void *Dst, int Val, size_t Size);
memset函数将Dst所在的内存区域进行重置为Val值,重置的范围由Size决定,表示Dst所在的内存区域的Size字节被置为Val值。memset一般用作一段内存空间或数组的初始化。
例:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int *p = (int *)malloc(10 * sizeof(int));
memset(p, 0, 10*sizeof(int));
free(p);
return 0;
}
需要注意的是,
memset对int型内存空间重置时,Val值取0或-1得到的结果是正确的,对于其他值都是不对的。
对于char型的空间重置的话,Val可以是数值,也可以是字符:
char str[10];
memset(str, 1, 10*sizeof(char)); // str字符数组,重置为数值1(ASCII码值为1)
memset(str, '1', 10*sizeof(char)); //str字符数组,重置为字符'1'
2. memcpy
memcpy的函数原型为:
void *memcpy(void *Dst, void *Src, size_t Size);
memcpy函数将Src所在区域的Size字节的数据复制到Dst所在的内存空间。需要注意的是,memcpy与strcpy相比,遇到'\0'不会停止复制,而是复制完Size字节。
例:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *p = (char *)malloc(10 * sizeof(char));
char a[10];
memset(p, 1, 10*sizeof(char));
memcpy(a, p, 10*sizeof(char));
free(p);
return 0;
}