关于如何实现memmove,即内存移动,就是......
C语言中的内存函数有如下这些memcpy
memmove
memcmp
memset
下面看看memmove函数
memmove
为什么会需要memmove函数?int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
// 想把12345 拷贝到 34567上去
// 应该打印 1 2 1 2 3 4 5 8 9 10
my_memcpy(arr + 2, arr, 20);
for (i = 0; i
{
printf("%d ", arr[i]);
}
// 但是输出 1 2 1 2 1 2 1 8 9 10
return 0;
}
上面会输出 1 2 1 2 1 2 1 8 9 10,我们来看看为什么会出现这样的结果。
我这里画了张图,方便理解。
因为拷贝的地方重叠了,使原来的数据(3 4 5)被覆盖了,导致最后出来的结果不是我们想要的。
也就是说,如果拷贝的地方重叠了,那么就会出现这种情况。
那么如何解决呢&#x