动手实现自己的memcpy和strcpy

目录

一、问题由来

二、动手实现你的memcpy

1.单字节拷贝

2.四字节拷贝(提升效率)

三、动手实现你的strcpy

四、测试结果


一、问题由来

        C库中已提供有原生的memcpy、memmove以及strcpy等函数,位于<string.h>头文件中。

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

        上面是C库中原生的memcpy声明,该memcpy在dst与src两者的内存地址不互相重叠时,可以得到正确的处理结果,而两者的内存地址有重叠时,该接口并不保证处理结果的正确性。

        接着则是memmove在string.h中的声明,memmove比memcpy更先进的原因则在于:它解决了内存重叠时的拷贝情形。但memmove在不同编译器上的实现会有所不同,故memmove在内存不重叠时,不一定会比memcpy更快

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

       再观之strcpy的函数原型,发现其声明与memcpy有几分相似,从中也可以看出:memcpy和memmove比strcpy的适用范围更大,strcpy只是它们的特殊情形

char *strcpy(char *dest, const char *src)

        说到此,不论是探索的需求,还是面试的需求,想必读者已经迫不及待地想要手撕一遍memcpy和strcpy的实现了,here we go! (但先说好了,咱们只是原理上的实现,而不是探索极致的效率,真正的源码情况会考虑到更多的情况。)

二、动手实现你的memcpy

1.单字节拷贝

        src与dest两者的相对位置存在好几种可能性,有些相对位置不会影响到拷贝的结果,而有些则会影响到拷贝的结果。

情形1:src + size < dest,即待拷贝区域与dest区域不重叠

 这种情形下,只需将src中的数据从前往后挨个地拷贝到dest中即可。

情形2:dest与src的区域有重叠,但dest < src

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值