memcpy 和 strcpy


memcpy实现

void *myMemCopy(void *dest,const void *src,size_t count) 
{    
   char *pDest=(char *)(dest); 
    const char *pSrc=(const char *)(src);
    //目的地址和源地址重叠,从源地址的末尾方向开始拷贝    
  if( pDest>pSrc && pDest<pSrc+count )
     {       
     pDest = pDest + count-1;   
      pSrc = pSrc + count-1;        
 while(count--)
{       
      *pDest-- = *pSrc--;      
   }    
 }



    //目的地址和源地址不重叠,从源地址的开始方向拷贝    
 else    
 {        
 while(count--)
{       
       *pDest++ = *pSrc++;    
     }   
  }
    return pDest;
 }

  

strcpy实现,没有考虑地址重叠

char * strcpy(char *dst,const char *src)   //[1]
{
    assert(dst != NULL && src != NULL);    //[2]

    char *ret = dst;  //[3]

    while ((*dst++=*src++)!=''); //[4]

    return ret;
}

考虑地址重叠

char * strcpy(char *dst,const char *src)   //[1]
{
    assert(dst != NULL && src != NULL);    //[2]

    char *ret = dst;  

    mymemcpy(dest,src,strlen(src)+1);
      return ret;
}

原文地址:https://www.cnblogs.com/dynas/p/5380314.html