题目

  1. memmove的实现

代码

#include <stdio.h>
#include <stdlib.h>

void mymemmove(void *to, void *from, size_t count)
{
    char *pTo, *pFrom;
    //从后往前复制
    if(to>from)
    {
        pFrom=(char*)from+count-1;
        pTo=(char*)to+count-1;
        while(count)
        {
            *pTo=*pFrom;
            pFrom--;
            pTo--;
            count--;
        }

    }else{    //从前往后复制
        pFrom=(char*)from;
        pTo=(char*)to;
        while(count)
        {
            *pTo=*pFrom;
            pFrom++;
            pTo++;
            count--;
        }

    }
}


int main()
{
    int a[5]={1,2,3,4,5};
    int b[5]={1,2,3,4,5};
    int i;
    mymemmove(a,a+2,12);
    for(i=0;i<5;i++)
    {
        printf("%3d",a[i]);
    }
    printf("\n");
    mymemmove(b+2,b,12);
    for(i=0;i<5;i++)
    {
        printf("%3d",b[i]);
    }
    printf("\n");
    system("pause");
}

结果
图片说明

总结:

  • memcpy只能实现从前往后的操作(PS:现在memcpy得到改进了,可以用在内存重叠的情况中了);memmove既可以实现从头往后的操作,也可以实现从后往前的操作。