void memcpy(void *pDst ,void *pSrc ,size_t length)
{
char *dst=static_cast<char*>(pDst); //转换成char*
char *src=static_cast<char*>(pSrc);
if ((src==nullptr)||(dst==nullptr)) //判断是否为野指针
{
/* code */
return;
}
//分段讨论,判断dst和区间(src,src+length)的位置关系
//地址不重叠,
//(1)dst<src,dst在src前面,此时即便dst尾部和src的头部有部分重叠也无所谓,只需要从src的头部复制到尾部即可
//(2)dst>src+length,只需要从src的头部复制到尾部即可
if (dst<src || dst>src+length)
{
/* code */
for (int i = 0; i < length; ++i)
{
/* code */
*dst++=*src++;
}
}
else //地址重叠,(3)src <= dst <= src+length,此时需要从尾部开始复制
{
dst=dst+length-1; //定位到尾部
src=src+length-1;
for (int i = length; i >=0 ; i--) //从尾部开始复制
{
/* code */
dst[i]=src[i];
}
}
}
[C++]实现memcpy
最新推荐文章于 2024-08-06 15:46:37 发布