↵一、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 <stdio.h>
#include <string.h>
//实现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;
}