AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

memcpy和memmove

作者: 作者的头像   贺谦 ,  2020-12-28 13:39:59 ,  阅读 76


1


memcpy

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

void *Memcpy(void *dst, const void *src, size_t size)
{
    char *psrc;
    char *pdst;

    if(NULL == dst || NULL == src)
    {
        return NULL;
    }

    if((src < dst) && (char *)src + size > (char *)dst) // 自后向前拷贝
    {
        psrc = (char *)src + size - 1;
        pdst = (char *)dst + size - 1;
        while(size --)
        {
            *pdst-- = *psrc--;
        }
    }
    else
    {
        psrc = (char *)src;
        pdst = (char *)dst;
        while(size--)
        {
            *pdst++ = *psrc++;
        }
    }

    return dst;
}

int main(int argc, char *argv[])
{
    char buf[100] = "abcdefghijk";
    //memcpy(buf+2, buf, 5);
    Memcpy(buf+2, buf, 5);
    printf("%s\n", buf);
}

memmove

#include <stddef.h>

void* Memmove(void* dst, const void* src, size_t cnt)
{
    char* dstp = dst;
    const char* srcp = src;

    if (src < dst)
    {
        dstp += cnt;
        srcp += cnt;
        while (cnt --)
        {
            *-- dstp = *-- srcp;
        }
    }
    else
    {
        while (cnt --)
        {
            *dstp ++ = *srcp ++;
        }
    }

    return dstp;
}

int main()
{
    char str[] = "memmove can be very useful";
    Memmove(str + 20, str + 15, 11);
    printf("%s\n", str);

    return 0;
}

0 评论

你确定删除吗?

© 2018-2021 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息