为了账号安全,请及时绑定邮箱和手机立即绑定

memcpy函数的实现

标签:
Java

1.按1个字节拷贝
(1)不要直接使用形参,要转换成char*
(2)目标地址要实现保存
(3)要考虑源和目标内存重叠的情况

void * mymemcpy(void *dest, const void *src, size_t count){    if (dest == NULL || src == NULL)          return NULL;    char *pdest = static_cast <char*>(dest);    const char *psrc  = static_cast <const char*>(psrc);    int n = count;    
    if (pdest > psrc && pdest < psrc+count)
    {        for (size_t i=n-1; i != -1; --i)
        {
                pdest[i] = psrc[i];
        }
    }    else
    {        for (size_t i= 0; i < n; i++)
        {
                pdest[i] = psrc[i];
        }
    }    
    return dest;
}

2.按4个字节拷贝
(1)转成int*,按照每次4个字节来拷贝,不足四个字节的按一个字节拷贝

void *mymemcpy(void *dst,const void *src,size_t num){
    assert((dst!=NULL)&&(src!=NULL));    int wordnum = num/4;//计算有多少个32位,按4字节拷贝
    int slice = num%4;//剩余的按字节拷贝
    int * pintsrc = (int *)src;    int * pintdst = (int *)dst;    while(wordnum--)*pintdst++ = *pintsrc++;    while (slice--)*((char *)pintdst++) =*((char *)pintsrc++);    return dst;
}



作者:晟夏的叶
链接:https://www.jianshu.com/p/9f906a318593


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
233
获赞与收藏
1008

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消