自定义内存复制函数memcpy()
2015-12-14 11:46
615 查看
memcpy是C语言中的内存复制函数,它的目的是将src指向地址为起始地址的连续n个字节的数据复制到以dest所指向地址为其实地址的空间内,函数返回指向destin的指针。需要注意的是src与dest所指内存区域不能重叠。
与strcpy相比,memcpy遇到’\0’不结束,而且一定会复制完n个字节。只要保证src开始有n字节的有效数据,dest开始有n字节内存空间就行。如果目标数组本身已有数据,执行memcpy()之后,将覆盖原有数据(最多覆盖n个)。如果要追加数据,则每次执行memcpy()后,要将目标地址增加到要追加数据的地址。
与strcpy相比,memcpy遇到’\0’不结束,而且一定会复制完n个字节。只要保证src开始有n字节的有效数据,dest开始有n字节内存空间就行。如果目标数组本身已有数据,执行memcpy()之后,将覆盖原有数据(最多覆盖n个)。如果要追加数据,则每次执行memcpy()后,要将目标地址增加到要追加数据的地址。
#include<stdio.h> void* Mymemcpy(void* dest,const void* src,size_t count) { char* pdest=static_cast<char*>(dest);//安全转换 const char* psrc=static_cast<const char*>(src); if((pdest>psrc)&&(pdest<(psrc+count)))//内存区域有重叠 { for(size_t i=count-1;i!=-1;i--) pdest[i]=psrc[i]; } else //内存区域无重叠 { for(size_t i=0;i<count;i++) pdest[i]=psrc[i]; } return dest; } int main() { char str[]="0123456789"; Mymemcpy(str+1,str+0,9); printf("%s\n";str); Mymemcpy(str,str+5,5); printf("%s\n",str); return 0; } //程序输出结果: //0012345678 //4567845678
相关文章推荐
- 获取Graphics对象的方法
- Maven常用到的一些方法
- jQuery 小技巧
- 正则表达式 转义
- Lesson 27 Nothing to sell and nothing to buy
- Dispatcher.Invoke and Dispatcher.BeginInvoke
- 单片机控制外部中断输入
- JS控制图片显示的大小(图片等比例缩放)
- asp.net后台获取路径的各种方法归纳
- 获取资源ID
- 自信的秘密
- 博客已转移至 http://blog.yemou.net/
- 9.png是什么?怎么用?
- 日期格式处理JS插件
- JavaScript中eval()函数用法详解
- 对话框
- mysql缓冲和缓存设置
- 转载-java多线程与并发面试题
- 广告点击率的贝叶斯平滑
- params(C# 参考)