模拟实现memmove
2016-06-04 20:22
316 查看
memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。
如果没有重叠,它可以像memcpy效果一样,但是效率没有memcpy高。
函数实现:
如果没有重叠,它可以像memcpy效果一样,但是效率没有memcpy高。
函数实现:
#include<stdio.h> #include<assert.h> void *my_memmove(void *dest, void *str, size_t len) { assert(dest); assert(str); char *pdest = (char *)dest; char *pstr = (char*)str; if ((pstr < pdest) && (pdest < pstr + len)) //源和目标有重叠的情况,从后往前拷贝 { while (len--) { *(pdest + len) = *(pstr + len); } } else //没有重叠,从前往后拷贝 { while (len--) { *pdest = *pstr; pdest++; pstr++; } } return dest; }测试:
int main() { int i = 0; int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; int size = sizeof(arr) / sizeof(arr[0]); my_memmove(arr, arr + 3, 8); //注意这里的长度是以一字节为单位的 for (i = 0; i <size ; i++) { printf("%d ", arr[i]); } getchar(); return 0; }
相关文章推荐
- CentOS 6.6 下源码编译安装MySQL 5.7.5
- Python--基础学习--流程控制
- 4. 使用别的json解析框架【从零开始学Spring Boot】
- 调用系统下载安装apk
- 56. Merge Intervals
- 手机开发实战61——TCP/IP协议简介
- Android 生成xml文件
- Chrome浏览器导入Burp Suite证书
- IE11无法打开网页,一片空白,Internet选项灰色无法点击的问题
- 个人开发总结(1)-ios创建对象
- CMD命令简单使用
- MFC hook注入dll,远程线程注入dll
- nginx 配置文件解释及优化安全
- JVM 调优和垃圾回收器说明
- COGS 619 传话 解题报告
- 基于Bootstrap使用jQuery实现输入框组input-group的添加与删除-改进版
- How does memmove differ from memcpy
- 54 59. Spiral Matrix I II
- Iterator接口用法
- html表单及其属性