两个函数的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。
#include <stdio.h>
#include <stdlib.h>
//memcpy函数
void* my_memcpy(void* dest, const void* s, size_t n)
{
int i = 0;
char* des = (char*)dest;
const char* src = (const char*)s;
while (i < n)
{
*(des + i) = (src + i);
i++;
}
return (void)dest;
}
//memmove函数
void* my_memmove(void* dest, const void* s, size_t n)
{
char* des = (char*)dest;
const char* src = (const char*)s;
if ((des - src) > n || (des - src) < 0)
{
int i = 0;
while (i < n)
{
*(des + i) = *(src + i);
i++;
}
}
for (int i = n - 1; i >= 0; i–)
{
*(des + i) = *(src + i);
}
return (void *)dest;
}