memset memcpy memmove和memcmp函数属于内存操作函数,下面对这几个函数的用法进行简单说明
- memset函数:
void* mamset(void*s,int c,size_t n);
功能:将s指向的空间前n个字节初始化为c,但一般c的值为0
例子:
int main()
{
int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
memset(a, 0, 40);
for (int i = 0; i < 10; i++)
{
printf("%d\n", a[i]);
}
system(“pause”);
return 0;
}
但是当我们选择使用1进行初始化时,结果是:
原因如下:memset函数是对内存最小单位进行初始化,而char类型占用8字节,是基本单位,即初始化最小单位就是一个字节,即00~ff(二进制表示),那么,当选择1进行初始化时,就变成这样:01010101(16进制,改为十进制数为16843009),因此显示结果如图
PS:使用此函数一般初始化为0(别的值和预期的不同),注意最后一个参数单位是字节。
-
memcpy函数
void *memcpy(void dest,void src,size_t n)
作用:拷贝src中n个字节到dest中,与strcpy函数相近
例子:int main()
{
int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
int b[10];
memcpy(b, a,40);
for (int i = 0; i < 10; i++)
{
printf("%d\n", b[i]);
}
system(“pause”);
return 0;
}
与函数strcpy函数的区别: -
参数不同,一个是char* 一个是void*
-
strcpy只能拷贝字符串,memcpy范围较广
-
strcpy以遇到‘\0’为结尾,memcpy以参数个数结尾
-
memmove函数
用法和memcpy一样,但当dest参数和src参数有地址重叠时,此函数更加安全,但效率低一些 -
memcmp函数
int memcmp(void *s1,void *s2,size_t n)
作用:s1和s2进行比较,相等返回0,小于返回值小于0,大于返回值大于0int main()
{
int a[10] = { 1,2,3,4,5,6,7,8,9,0 };
int b[10] = { 1,2,3,4,5};
int result=memcmp(b, a,4);//比较第一个数
printf("%d\n", result);
system(“pause”);
return 0;
}