模拟实现memcpy和memove

来源:互联网 发布:photoshop cc mac版本 编辑:程序博客网 时间:2024/04/30 08:44

memcpy

首先我们应该知道memcpy有什么作用,他是一个内存拷贝函数,函数原型如下:void * memcpy ( void * destination, const void * source, size_t num );它的作用就是将源拷贝到目标,拷贝num个字节。下面看具体代码实现。

void *MyMemcopy(void * dest, const void * src, size_t num )//目标,源,拷贝的字节数 {     //拷贝的字节数只能小于或者等于目标空间的大小    assert(dest);    assert(src);    void* ret = dest;      char* str1 = (char*)dest;      char* str2 = (char*)src;      assert(dest);      assert(src);      while (num--)      {          *str1++ = *str2++;//最后也就是把'\0'赋值过去了    }      return ret;   }

memmove

mememove相比较于memcpy更加的方便,在某种条件下它的功能是相当于memcpy的。下面画图来解释一下。
这里写图片描述
下面是具体的代码实现

void *MyMemmove(void * dest, const void * src, size_t num)     //和memcpy最大的不同就是,它是内存移动,反向拷贝,不是从头开始 {    void *ret = dest;    char *str1 = (char*)dest;    char *str2 = (char*)src;    if(str1>str2)    //只有当前面的位置比后面的位置高,才会反向拷贝,因为会有覆盖现象    {        while(num--)        {            *(str1+num) = *(str2+num);//反向赋值        }    }    else    {        while(num--)        {            *str1++ = *str2++;        }    }    return ret; }

以上是我的个人心得体会,欢迎指正!

原创粉丝点击