您的位置:首页 > 编程语言 > C语言/C++

C语言 memmove函数实现

2016-11-16 22:12 246 查看

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,这样就解决了内存重叠的问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 memmove