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