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中, 但是源代码中这两个函数的处理
memcpy源代码
最新推荐文章于 2022-11-02 19:50:54 发布
在一次开发职位的面试中,作者被要求实现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通过智能技术生成