memmove和memcpy的一种简单清晰的实现

2350阅读 0评论2014-12-04 cqw_cu_
分类:C/C++

看过一些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;
}
上一篇:C++中cout简单实现
下一篇:关于sizeof运算符的思考