终于决定整理自己的写的库函数了
#include <stdio.h>void *ystd_memmove(const void *src,void *dst,size_t n){ void * ret = dst; //not overlap if((dst < src)||(src + n)<= dst) { while(n--) *(char *)dst++ = *(char *)src++; }else if(src < dst){//if src == dst quickly return dst += n; src += n; while(n--) *(char *)(--dst) = *(char *)(--src); } return ret;}int main(){ char buf[]= "hunter you can't do it"; char mem[100] ; //内存区域不重合 ystd_memmove(buf,mem,sizeof(buf)); printf("mem = %s\n",mem); //内存区域重合了 ystd_memmove(mem,mem+10,sizeof(buf)); printf("mem = %s\n",mem); return 0;}
测试结果
mem = hunter you can't do itmem = hunter youhunter you can't do it
可以看到对于内存区域重合的部分,仍然拷贝成功了。
其实代码再添加写assert判断,就好了。呵呵,大家做个参考吧。
原文链接: https://www.cnblogs.com/westfly/archive/2011/05/19/2051409.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/25763
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!