解决内存重叠的问题,解决方案是,通过一定的判断,来进行决策,是从左向右拷贝还是从右向左拷贝
1.先观察现象->内存重叠的时候,可能会将有效数据进行覆盖的问题
2.分析原因且提出初步的解决方案->左右拷贝,右左拷贝
3.穷举所有的可能覆盖的情况找到规律,总结策略
#include<stdio.h>
#include<windows.h>
#include<assert.h>
void *Mymemove(void* dst,const void* src, size_t num)
{
//模拟实现memove
assert(dst != NULL);
assert(src != NULL);
char* dst_p = (char*)dst;
const char* src_p = (char*)src;
if (dst_p > src_p && dst_p < src_p + num)
{
//从右向左
while (num > 0)
{
*(dst_p+num-1) = *(src_p+num-1);
num--;
}
}
else {
//从左向右
while (num > 0)
{
*dst_p = *src_p;
dst_p++;
src_p++;
num--;
}
}
return dst;
}
int main()
{
char src[32] = "abcdefg123456";
int len= strlen(src);
Mymemove(src+3, src, len);//从左往右
//Mymemove(src, src+3, len);//从右往左
printf("%s\n", src);
system("pause");
return 0;
}
//运行环境vs2019
附图: