函数原型
void *memmove( void *dest, const void *src, size_t count );
头文件
<string.h>
功能
memmove函数从src(源内存地址起始位置)拷贝count个字节到des(目的地内存地址的起始位置)
使用须知
memmove函数不仅可以完成memcpy函数的所包含功能,还可以完成重叠内存区域的拷贝任务。
实现思路
先找出des与src的位置关系,完之后分别实现代码。图解如下(小端存储器下)
des > src(从前往后拷贝字符)
des < src(从前往后行不通,1拷贝到3,那么3的位置就不在是3了而是1,换思路从后往前)
(src + 19 拷贝到des + 19)(再拷贝到+18,+17,…,+1)(逐字节偏移)
实现memmove代码
#include<stdio.h>
#include<assert.h>
void* My_memmove(void* des, const void* src, size_t count)
{
assert(des && src);//断言编程好习惯!!!
void* ret = des;
//从后往前
if (src < des)
{
while (count--)//num此步已经完成自减1的操作,
{
//(src + 19 拷贝到des + 19)(再拷贝到+18,+17,...,+1)
//(逐字节偏移)
*((char*)des + count) = *((char*)src + count);
}
}
//从前往后
else
{
while (count--)
{
*(char*)des = *(char*)src;
++(char*)des;
++(char*)src;
}
}
return ret;
}
int main()
{
int i;
int arr1[] = {
1,2,3,4,5,6,7,8,9,10 };
My_memmove(arr1, arr1 + 2, 5 * sizeof(int));
for (i = 0; i < 10; i++)
{
printf("%d ", arr1[i]);
}
return 0;
}
若对你有帮助,别忘了分享收藏 哦!Good Day!!!
转载:https://blog.csdn.net/MerryMaking7946/article/details/114899412
查看评论