欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

模拟实现memmove函数

程序员文章站 2022-05-12 12:57:44
...
分析

memmove是内存移动函数,我们现在要将数组中的1,2,3,4拷贝到3,4,5,6的位置即
模拟实现memmove函数
如果不考虑反向拷贝则会变成
模拟实现memmove函数
原来3,4的位置已经被修改成1,2,所以无法实现
你会发现上面目标3所在的位置大于源1所在的位置,则需要反向从后向前拷贝,即不会发生冲突,可实现正确拷贝
模拟实现memmove函数

dest指代的是目标,src指代源。
代码如下

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void * my_memmove(void * dest,const void * src,size_t count)
{
    void * ret = dest;
    assert(dest!=NULL);
    assert(src!=NULL);
    if(dest<src)
    {
        //前--后
        while(count--)
        {
            *(char*)dest = *(char*)src;
            dest = (char*)dest+1;
            src = (char*)src+1;

        }
    }
    else
    {    //从后向前
        while(count--)
        {
            *((char*)dest+count) = *((char*)src+count);
        }
    }
        return ret;
}

测试代码

int main()
{
    int arr1[]={1,2,3,4,5,6,7,8,9};
    int i = 0;
    for(i=0;i<9;i++)
    {
        printf("%d ",arr1[i]);
    }
    printf("\n");
    my_memmove(arr1+2,arr1,16);
    for(i=0;i<9;i++)
    {
        printf("%d ",arr1[i]);
    }
    system("pause");
    return 0;

}

实现结果
模拟实现memmove函数

相关标签: c语言典型题