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++)!=‘\0‘); //[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;
}
原文:http://www.cnblogs.com/dynas/p/5380314.html