void *memmove( void *dest, const void *src, size_t count );
红色方框(src)是源代码,蓝色方框(dest)是要拷贝的目的地。
如果dest地址小于src就是有部分在3前面
例如:dest(12345),src(34567)采用从前拷贝就是(3拷贝到1位置依次进行)拷贝后
为34567678910如果从后往后的话(7拷贝到5而五还没拷贝这样会出错)导致结果是76767678910而出错。
下面memmove模拟
//模拟实现memmove #include<stdio.h> void* my_memmove(void* dst, const void* sor, int count) { void* ret = dst; while (count--) { if (dst < sor) { *(char*)dst = *(char*)sor; (char*)dst = (char*)dst + 1; (char*)sor = (char*)sor + 1; } else { *((char*)dst + count) = *((char*)sor + count); } } return dst; } int main() { int i = 0; int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; my_memmove(arr+2, arr, 20); for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }