现在的位置: 首页 > 综合 > 正文

面试题:写一个memmove函数

2019年11月21日 ⁄ 综合 ⁄ 共 575字 ⁄ 字号 评论关闭

引言

       面试中经常会遇到这样一些题目,比如memmove、memcpy和strcpy等函数,用来考察编程基本功。memcpy不会进行内存重叠检查,而memmove会进行检查,面试的时候这个问题一般是考察这一点的,即要求检查内存是否有重叠区域。还要注意的是不能直接对void*进行操作,需要转换类型。并且函数原型src的地址需要是const*类型,即不能修改,细节。

代码

void *memmove(void *dest, const void *source, size_t count)
{
    assert((NULL != dest) && (NULL != source));
    char *tmp_source, *tmp_dest; 
    tmp_source = (char *)source;//注意,void*类型不能直接操作,需要进行转换。
    tmp_dest = (char *)dest;
    if((dest + count<source) || (source + count) <dest))
    {// 如果没有重叠区域
        while(count--)
            *tmp_dest++ = *tmp_source++;
    }
    else
    { //如果有重叠(反向拷贝)
        tmp_source += count - 1;
        tmp_dest += count - 1;
        while(count--)
            *--tmp_dest = *--tmp;
}
    return dest;
}

抱歉!评论已关闭.