Chinaunix首页 | 论坛 | 博客
  • 博客访问: 108755
  • 博文数量: 12
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 244
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-02 11:07
个人简介

联系方式:825988516@qq.com 业精于勤荒于嬉 行成于思毁于随

文章分类
文章存档

2014年(12)

我的朋友

分类: C/C++

2014-12-04 14:36:18

看过一些memmove和memcpy的实现方式,下面是个人觉得最直观清晰的一种实现方式:

void *memmove(void *dest, const void *source, size_t count)
{
        assert((NULL != dest) && (NULL != source));

        char *tmp_source, *tmp_dest;
        tmp_source = (char *)source;
        tmp_dest = (char *)dest;

        if((dest + count         {      // 如果没有重叠区域
                while(count--)
                *tmp_dest++ = *tmp_source++;
        }
        else
        {      //如果有重叠
                tmp_source += count - 1;
                tmp_dest += count - 1;
                while(count--)
                        *--tmp_dest = *--tmp;
        }
        return dest;
}


void *memcpy(void *dest, const void *source, size_t count)
{
        assert((NULL != dest) && (NULL != source));

        char *tmp_dest = (char *)dest;
        char *tmp_source = (char *)source;

        while(count --) //不对是否存在重叠区域进行判断
                *tmp_dest ++ = *tmp_source ++;
        return dest;
}
阅读(2234) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~