标签:
在内存复制的时候,如果两段内存有重叠,那么就很容易产生覆盖。所以重写这个函数,对有重叠的内存的拷贝进行处理。
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