memmove函数与memcpy函数的模拟实现

memmove函数和memcpy函数都是在内存复制任意类型的,但是它俩也有区别。当源区域和目标区域有重复的,memmove函数会复制缓冲区重叠的部分,而memcpy相反,会报出未知错误。
下面给出两个函数的实现
首先,memmove函数。
实现的基本原理如下图。
memmove函数与memcpy函数的模拟实现_第1张图片
具体代码如下:

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

你可能感兴趣的:(C语言)