↵一、memove函数
void *memmove(void *dest, const void *src, size_t count);
使用memove进行重叠字符串的拷贝大致可分为两种情况:
1.从前向后拷贝:当src内存位置高于dest
2.从后向前拷贝:当src内存位置低于dest
二、实现代码如下:
#define _CRT_SECURE_NO_WARNINGS 1 #include#include //实现my_memmove重叠内存的拷贝 void* my_memmove(void* dest, const void* src, size_t count) { void* ret = dest; assert(dest&&src); //从前向后拷贝 if ((dest < src) || ((char*)dest >= ((char*)src + count))) { while (count--) { *(char*)dest = *(char*)src; ++(char*)dest; ++(char*)src; } } else//从后向前拷贝 { while (count--) { *((char*)dest + count) = *((char*)src + count); } } return ret; } int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; int i = 0; my_memmove(arr, arr+3, 20);//从下标为2的元素开始拷贝5个元素覆盖1 2 3 4 5 for (i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }



