一.memmove的介绍
void* memmove ( void* dest, const void* src, size_t num );
和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的
如果源空间和目标空间出现重叠,就要使用memmove函数处理
二.memmove的实现
#include<stdio.h>
#include<assert.h>
void* my_memmove(void* dest, const void* src, size_t count)
{
assert(dest && src);
void* ret = dest;
if (src > dest)
{
while (count--)
{
*(char*)dest = *(char*)src;
(char)dest += 1;
(char)src += 1;
}
}
else
{
while (count--)
{
*((char*)dest + count) = *((char*)src + count);
}
}
return ret;
}
void test_my_memmove()
{
int a[] = { 1,2,3,4,5,6,7,8,9,10 };
my_memmove(a, a+2, 20);
//my_memmove(a+2, a, 20);
for (int i = 0; i < 10; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
int main()
{
test_my_memcpy();
return 0;
}