对于memmove可以用来处理memcpy无法处理的重叠拷贝现象
这里就要分析如何消除重叠拷贝现象
1.当dest在src之前以及源头地址和目的地址之间没有交集时 采用从前向后拷贝的方式
while(num--)
{
*(char*)dest = *(char*)src;
dest = (char*)dest + 1;
src = (char*)src + 1;
}
2.当dest在src于src+num之间时 采用从后向前拷贝的方式
while(num--)
{
*((char*)dest + num) = *((char*)src + num);
}
完整代码如下:
#include #include#include void* my_memmove(void* dest,const void* src, size_t num) { assert(dest != NULL); assert(src != NULL);//保证指针有效性 void* ret = dest; if((char*)dest > (char*)src && (char*)dest < (char*)src + num) { while(num--) { *((char*)dest + num) = *((char*)src + num); } } else { while(num--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } } return ret; } int main() { int arr1[] = {1,2,3,4,5,6}; int i = 0; my_memmove(arr1+1,arr1,2); int sz = sizeof(arr1)/sizeof(arr1[0]); for(i=0;i



