c语言中的memcpy实现

本文通过汇总一些网上搜集到的资料,总结c语言中的memcpy实现

背景

想必大多数人在面试时被要求写 memcpy的实现,很不幸,我也吃过这个亏(这种题要是写的一塌糊涂后面完全没戏),所以还是得提前准备一下,不然就只能呵呵了。先来看看一段错误的示范: 找茬:)

void * memcpy(void *dest, const void *src, unsigned int count);
{
    if ((src == NULL) || (dest == NULL))
        return;
    
    while (count--)
        *dest++ = *src++;
        
    return dest;
}
dest都指到哪里去了?怎么着也得备份一下dest的值,好让函数返回的指针是从头开始的

考虑一下指针类型,如果dest和src的指针类型不一样,不能直接++赋值. 例如: int* p和 char*q, p++指针的值是4个4个加(0,4,8),q++是1个1个加(0,1,2,3,4)


第二版 - 定义两个临时变量,不要直接++ dest和src,并且指明指针类型char *

void *memcpy(void *dest, const void *src, size_t count)
{
 char *tmp = dest;
 const char *s &
  • 47
    点赞
  • 145
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值