在内存复制的时候,如果两段内存有重叠,那么就很容易产生覆盖。所以重写这个函数,对有重叠的内存的拷贝进行处理。
void* memmove(void* str1,const void* str2,int n)
{
char* pStr1 = (char*) str1;
const char* pStr2 = (const char*)str2;
if(pStr1 < pStr2) //从前面开始copy
{
for(int i=0; i!=n; ++i)
{
*(pStr1++) = *(pStr2++);
}
}
else //从后面开始copy
{
pStr1 += n-1;
pStr2 += n-1;
for(int i=0; i!=n; ++i)
{
*(pStr1--) = *(pStr2--);
}
}
return pStr1;
}
为了避免把还未copy的内存区域覆盖掉,这里用到的解决办法就是根据两块内存的位置,从前面或者后面进行内存copy。

原文:http://www.cnblogs.com/stemon/p/4665430.html