memmove函数和memcpy函数都是在内存复制任意类型的,但是它俩也有区别。当源区域和目标区域有重复的,memmove函数会复制缓冲区重叠的部分,而memcpy相反,会报出未知错误。
下面给出两个函数的实现
首先,memmove函数。
实现的基本原理如下图。
具体代码如下:
void * my_memmove(void *dst,void *src,int count)
{
char *_dst=(char *)dst;//void*不能做运算,所以转成char*
char *_src=(char *)src;
char *ret=_dst;
if(_src<_dst && (_src+count)>_dst)//从后往前拷贝
{
char *dst_end=_dst+count-1;
char *src_end=_src+count-1;
while(count)
{
*dst_end=*src_end;
dst_end--;src_end--;
count--;
}
}
else
{
while(count--)
{
*_dst=*_src;
_dst++;_src++;
}
}
return ret;
}
memcpy函数的实现很简单,就直接给出源代码了
void * my_memcpy(void *dst,void *src,int count)
{
char *d=(char *)dst;
char *s=(char *)src;
while(count)
{
*d++=*s++;
count--;
}
return dst;
}