memcpy源代码

在一次开发职位的面试中,作者被要求实现memcpy函数。虽然完成了基本功能,但忽略了函数原型、ANSI标准和内存重叠处理。面试后意识到错误,memcpy原型应为void* memcpy(void* dest,const void* src,size_t count),根据ANSI标准,void指针不能直接进行算法操作,需要转换为具体类型。此外,memcpy不处理内存重叠,而memmove会处理。文章分享了memcpy的源代码实现。" 118648087,10955934,Java面试深度解析:Kafka、Spring、微服务与数据库实战,"['面试技巧', 'Java', 'Spring框架', '微服务', '数据库理论']
摘要由CSDN通过智能技术生成

7月22号去面试开发的职位,面试官先问我在以前项目中写了什么程序,我就巴拉巴拉的说了一堆写过的code,主要还是测试工具和自动化测试代码。之后让我写memcpy的函数,面试官还挺好的,帮我把函数原型都写出来,以下是我的code.
 
void memcpy(void *dest, void *src, int len)
{
      void *p = dest;
      void *q = src;
      if( dest == NULL ||src == NULL)
      {
          return;
      }
 
      for (int i=0; i<len; i++)
     {
            *p++ = *q++;
     }
}
 
面试完了后我自我感觉良好,可是后来hr告诉没通过,我还觉得难以接受,没想到第二天公司的一个同事就正好讲到类似的函数,我才知道我错的有多么的严重。
1、函数原型应该是 void*memcpy(void* dest,const void* src,size_t count),虽然面试官给我写的原型也是错的,但是我应该早点看看的。
2、按照ANSI(American National Standards Institute)标准,不能对void指针进行算法操作,即不能对void指针进行如p++的操作,所以需要转换为具体的类型指针来操作,例如char *。
3、memcpy是对内存进行操作,可能遇到内存重叠的情况,同样的问题存在于memmove中, 但是源代码中这两个函数的处理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值