/*
memmove的函数原型:
void *memmove(void *dst,const void *src,size_t count);
头文件:#include<string.h>
作用是:实现内存的重叠拷贝
size_t count:按字节复制
memmove的函数行为和memcpy差不多,只是它的源和目标操作数可以重叠。
虽然他不需要以下面这种方式实现,不过memmove和这种方法的结果相同:把
源操作数复制到一个临时位置,这个临时位置不会与源目标操作数重叠,然
后再把它从这个临时位置复制到目标操作数,memmove通常无法使用某些机器
所提供的特殊的字节-字符串处理指令来实现,所以它可能比memcpy慢一些,
但是如果源和目标操作数真的可能存在重叠,就应该使用memmove.
*/
//它的实现过程如下:
#include<stdio.h>
#include<assert.h>
void *my_memmove(void *dst,void *src,int count)
{
void *ret=dst;
assert(dst);
assert(src);
if(dst<src||(char *)src+count<=(char *)dst)
{
while(count--)
{
*(char *)dst=*(char *)src;
dst=(char *)dst+1;
src=(char *)src+1;
}
}
else
{
dst=(char *)dst+count-1;
src=(char *)src+count-1;
while(count--)
{
*(char *)dst=*(char *)src;
dst=(char *)dst-1;
src=(char *)src-1;
}
}
return ret;
}
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,0};
my_memmove(a+1,a,20);
for(int i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
</pre><pre name="code" class="cpp">