这期给大家博主给大家介绍一下C语言都有那些内存函数,干货满满哦,一定要耐心看完。
一、memcpy()函数
1、memcpy的介绍及使用
memcpy()函数是C/C++使用的内存拷贝库函数,既然是库函数,我们先来了解一下它的功能以及参数吧 由以上我们可以知道memcpy()一共有三个参数,返回值是void*
(a)viod* destination —— 拷贝的目标内存地址
(b)const void* source —— 拷贝的原始内存地址
(c)size_t num —— 拷贝的字节数
下面我们来看看它的使用,废话不多说,直接上代码
int main()
{
int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
int arr2[10];
memcpy(arr2, arr1, sizeof(arr1) / 2);
printf("拷贝后:\n");
for (int i = 0; i < sizeof(arr1) / (2 * sizeof(int)); i++)
{
printf("%d ", arr2[i]);
}
return 0;
}
运行结果:
2、模拟实现memcpy()函数
void* my_memcpy(void* dest, const void* src, size_t num)
{
assert(dest && src);
void* p = dest;
while (num--)
{
*((char*)dest) = *((char*)src);
(char*)dest = (char*)dest + 1;
(char*)src = (char*)src + 1;
}
return p;
}
int main()
{
char str1[] = "hello world!";
char str2[10] = "xxxxxxxxx";
my_memcpy(str2, str1, 5);
printf("%s\n", str2);
return 0;
}
二、memmove()函数
1、memmove的介绍及使用
下面我们来看看memmove()函数的参数及返回值
注意: 1.咋这一看参数和返回值与memcpy一模一样呢,是的,他们参数一样,有什么区别呢,请耐心看完文章。 2.memmove()函数也是C语言库函数中的拷贝函数,但是它拷贝的是同一个数据中的内容
下面来看看它如何使用,上代码
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
memmove(arr + 2, arr, 20);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
运行结果:
2、模拟实现memmove()函数
void* my_memmove(void* dest, const void* src, size_t num)
{
assert(dest && src);
void* p = dest;
if (dest < src)
{
while (num--)
{
*((char*)dest) = *((char*)src);
(char*)dest = (char*)dest + 1;
(char*)src = (char*)src + 1;
}
}
else
{
while (num--)
{
*((char*)dest + num) = *((char*)src + num);
}
}
return p;
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
my_memmove(arr + 2, arr, 20);
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
运行结果:
三、总结
memcpy()与memmove()的区别
memcpy()与memmove()都是库函数中的拷贝函数 但是memcpy是从另一个数组拷贝另一个 而memmove是在同一个数组中进行操作的 这里注意的是:有些编辑器在实现memcpy的时候把它完美实现了,既能在不同数组中操作,也能在同一个数组中操作,这里小编建议在使用的时候还是把它们区别开来比较好
结语:
每个人的成长和进步都离不开点点滴滴的积累,如果小编的内容对您有所帮助,希望友友们三连加关注哦,你的支持是小编创作的最大动力。
|