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;
}
时间: 2024-10-05 04:58:16