sherwood5 发表于 2017-6-1 13:33:47

算法练习-实现memmove,及memmove与memmcpy区别

void _Memmove(void *pDst,const void *pSrc, size_t size)
{
        if(NULL == pDst || NULL == pSrc || size == 0)
                return;
   //内存重叠
    if((pSrc<pDst) && ((char*)pSrc+size > pDst))
    {
      char *pstrSrc= (char *)pSrc + size -1;
      char *pstrDst = (char *)pDst + size -1;
       //从尾部拷贝
      while(size--)   
            *pstrDst -- = *pstrSrc--;
    }
    else
    {
      char *pstrSrc= (char *)pSrc ;
      char *pstrDst = (char *)pDst ;
      //没有就正常拷贝
      while(size--)   
      *pstrDst++ = *pstrSrc++;
    }
}


memmove考虑的内存重叠
memmcpy没有考虑
页: [1]
查看完整版本: 算法练习-实现memmove,及memmove与memmcpy区别