void *my_memmove(void *dest, void *src ,size_t n)
{
void *ret=dest;
assert(dest!=NULL && src!=NULL);
if (dest<=src || (char *)dest >= ((char *)src+n))
{
while (n--)
{
*(char *)dest=*(char *)src;
dest =(char *)dest+1;
src =(char *)src+1;
}
}
else
{
src=(char *)src+n-1;
dest=(char *)dest+n-1;
while (n--)
{
*(char *)dest=*(char *)src;
dest =(char *)dest-1;
src =(char *)src-1;
}
}
return ret;
}
int main()
{
char str1[20]="today is good";
char *p= (char *)my_memmove(str1+1,str1,strlen(str1)+1);
printf("%s\n",p);
return 0;
}
memmove函数和memcpy函数作用一样,但memmove可以解决内存重叠问题,memcpy没有办法,实现my_memmove(str1+1,str1,strlen(str1)+1)时后面地址小于前面地址,从后往前copy,相反从前往后copy,这样就解决了内存重叠的问题