memcpy函数和memmove函数

memcpy函数是C语言中的库函数。

函数原型:

void *memcpy(void *dst,const void *src,size_t count);

用于把src所指向的内存区域拷贝到dst所指向的内存区域,count控制拷贝多少个。

因为拷贝的时候是按字节序拷贝的,所以实际操作的时候要把void *转换成char *,保证准确拷贝

void *memmove(void *dst,const void *src,size_t count);

用于把src所指向的内存区域拷贝到dst所指向的内存区域,count控制拷贝个数

void *memccpy(void *dest,void *src,unsigned char ch,unsigned int count);

将src区域所指定的字符串拷贝到dest所指向的内存区间,但是遇到ch则停止复制。

返回ch后的第一个字符的指针。

两者的区分:这两个函数的作用是一样的,但是当遇到内存发生重叠的时候,memmove保证拷贝的结果是正确的,

但是memcpy不保证拷贝结果的正确。

注:对于内存重叠的情况,memcpy函数是没有定义的,所以这个地方有bug,而memove函数考虑了地址重叠的情况,

但是memmove函数存在严重的效率问题,该函数是用到了临时变量的替换,把源字符串拷贝临时缓存,然后再从

缓存拷贝的目的地址,增加了一次不必要的开销.所以遇到这种情况的时候我们要尽量自己实现。

1.

void myMemmove(void *dest,const void *src,size_t count)

{

assert(dest);

assert(src);

char *pDest=(char *)dest;

char *pSrc=(char *)src;

//判断是否有内存重叠

if(pDest>pSrc&&pDest<src+count)//

{

while(count)

{

*(pDest+count--)=*(pSrc+count--);

}

}//不重叠

else

{

while(count)

{

*pDest++=*pSrc++;

}

}

return pDest;

}

 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值