您的位置:首页 > 其它

自定义内存复制函数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()后,要将目标地址增加到要追加数据的地址。

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: