目录
一、功能说明
my_memmove手动实现 memmove 内存移动函数,可处理内存重叠场景:目标地址与源地址重叠时从后往前拷贝避免数据覆盖,无重叠则正向拷贝;主函数分别测试内存重叠拷贝、普通内存拷贝两种场景并输出结果。
二、代码展示
javascript
#include <stdio.h>
#include <stddef.h>
//模拟实现memmove
void* my_memmove(void* dest, const void* src, size_t n)
{
char* start = (char*) dest;
char* dst = (char*) dest;
const char* s = (const char*) src;
if(dst > s && dst < s + n)
{
for(size_t i = n; i > 0; i--)
{
dst[i-1] = s[i-1];
}
}
else
{
for(size_t i = 0; i < n; i++)
{
dst[i] = s[i];
}
}
return start;
}
int main()
{
char arr[] = "abcdefghij";
my_memmove(arr+3, arr+1, 5);
printf("结果为:%s\n", arr);
char arr2[] = "123456789";
char buf[20] = {0};
my_memmove(buf, arr2, 5);
printf("结果为:%s\n", buf);
return 0;
}
三、运行效果展示

四、总结
自行实现memmove函数,区分内存是否重叠来选择正向 / 逆向拷贝,防止重叠拷贝时数据被覆盖,最后两组测试验证功能。