现在的位置: 首页 > 综合 > 正文

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

2013年06月28日 ⁄ 综合 ⁄ 共 752字 ⁄ 字号 评论关闭
下面例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);
}

抱歉!评论已关闭.