避免内存重叠的memmove()函数
2015-06-25 10:31
218 查看
#include <iostream> #include <string.h> using namespace std; void* memmove(void *dst, const void *src, size_t count){ // 容错处理 if (dst == NULL || src == NULL){ return NULL; } unsigned char *pdst = (unsigned char *)dst; const unsigned char *psrc = (const unsigned char *)src; //判断内存是否重叠 bool flag1 = (pdst >= psrc && pdst < psrc + count); bool flag2 = (psrc >= pdst && psrc < pdst + count); if (flag1 || flag2){ // 倒序拷贝 while (count){ *(pdst + count - 1) = *(psrc + count - 1); count--; }//while } else{ // 拷贝 while (count--){ *pdst = *psrc; pdst++; psrc++; }//while } return dst; }
相关文章推荐
- 8天学通MongoDB——第一天 基础入门
- Hibernate单表操作(二)——基本类型
- extjs-->form
- WMI使用的WIN32_类库名
- JPG背景
- java swing
- IOS QQ第三方登陆提交AppleStore 被拒解决
- 欧几里得算法,最大公约数
- 计算机视觉和模式识别的code
- 二进制权限控制(二)
- Android字体Font相关知识
- 【Leetcode】【Medium】Simplify Path
- 解决Ecshop因为动态ip问题登录后台自动退出
- yun
- 第16周周四:GUI编程及文件对话框的使用 项目一:文件及选择
- PATBasic——1023. 组个最小数 (20)
- JQuery实现鼠标移动图片显示描述层的方法
- android 安装新的sdk后,R文件不会自动生成问题
- LTE定位技术及测试解决方案设计
- Binary Tree Preorder Traversal