strcpy memcpy 完整代码,包括内存块重叠的的情况

下面例1是修改网络上source code得到的一个版本,简洁,完全可以工作,但是没有考虑到src与dest的有重叠区域的情况,例2是个人修改后的代码,考虑了重叠的情况.留着备用,时刻提醒自己要注意代码风格及全面考虑问题.memcpy原理类似.
例1:
char *strcpy2(char *strDest, const char *strSrc)
{
assert( (strDest!=NULL) && ( strSrc!=NULL));
 if ( strDest == strSrc)
   return strDest ;
 char *pDest = strDest ;
 char *pSrc =strSrc;
 while( (*pDest ++ = *pSrc ++) != '\0');
 return strDest;
}

例2: 防止出现src与dest有重叠的情况
char *strcpy(char *pDst,const char *pSrc)
{
 assert(pDst != NULL);
 assert(pSrc != NULL);
 size_t size = strlen(pSrc);
 //src and dst has a  shared area.
 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++;
 }
 return(pDst);
}

你可能感兴趣的:(工作,网络,null,DST)