[C++]實現memcpy

消失男孩發表於2020-09-25

轉載於Vector_PX:C++ memcpy 實現

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];
		}
	}

}

相關文章