C++实现内存复制函数(memmove解决内存重叠)
2016-04-16 22:23
369 查看
memmove函数用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。
例如将ABC段复制到BCD段时,目标区域和源区域有重叠,当A段复制到B段时,B段发生损坏,无法再将完整的B段复制。
因此发生存在区域重叠时采用逆向复制
例如将ABC段复制到BCD段时,目标区域和源区域有重叠,当A段复制到B段时,B段发生损坏,无法再将完整的B段复制。
因此发生存在区域重叠时采用逆向复制
void* my_memmove(void*dest, const void* src, size_t n) { char*_dest = (char*)dest; const char*_src = (char*)src; if (_dest > _src&&_dest < _src + n)//发生区域重叠 { while (n--) { *_dest--= *(_src+n);//逆向复制 } } else//未发生区域重叠 正向复制 { while (n--) { *_dest++ = *_src++; } } return dest; } int main() { int s[4] = {1,2,3,4}; for (int i = 0; i < 4; i++) { cout << s[i] << ""; } cout << endl; my_memmove(s+2, s + 3,1*sizeof(int)); for (int i = 0; i < 4; i++) { cout << s[i]<<""; } getchar(); return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- 数据库链接字符串查询网站
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Flex字符串比较 还有Flex字符串操作
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- Ruby中创建字符串的一些技巧小结
- ASP下经常用的字符串等函数参考资料
- 将字符串小写转大写并延时输出的批处理代码
- PostgreSQL教程(五):函数和操作符详解(1)
- 将字符串转换成System.Drawing.Color类型的方法
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解