面试必会系列之--仿写memcpy

仿写思路上一篇博客已经提到过了,没看过的可以跳转过去看一看。atoi函数的仿写

下面直接上代码。

#include
void* mymemcpy(void* Dst, const void* Src,int length)
{
	assert(Dst != nullptr && Src != nullptr);
    
	char* dst = (char*) Dst;
    char* src = (char*) Src;
	while (length--)
	{
		*dst = *src;
		dst++;
		src++;
	}
	return dst;
}

这个函数在写的时候存在一点疑问,我也查看了很多相关的博客。
很多都把dst和src指向的两块内存空间分两种情况考虑:
1.内存不重叠
2.内存重叠
指的就是将原字符串往目标字符串拷贝时,dst指向的内存空间一直在src之前。这就不会发生内存重叠。如果dst指向的内存空间在src之后,就可能发生内存重叠,也就是如下图所示
面试必会系列之--仿写memcpy_第1张图片
发生内存重叠解决的方式就是,让src从后向前赋值给dst。
也就是src从 src+length -1开始往前进行拷贝,拷贝给dst。

你可能感兴趣的:(DS+Algorithm)