仿写思路上一篇博客已经提到过了,没看过的可以跳转过去看一看。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之后,就可能发生内存重叠,也就是如下图所示
发生内存重叠解决的方式就是,让src从后向前赋值给dst。
也就是src从 src+length -1开始往前进行拷贝,拷贝给dst。