内存拷贝实现
2008-12-08 10:50
435 查看
问题描述:写一个函数,完成内存之间的拷贝
#include<iostream>
using namespace std;
// 返回void *,可支持链式操作
void *memcpy_(void *dest, const void *source, unsigned int c_length)
{
assert(dest && source);
if(dest==source)return dest;
char *p1=static_cast<char*>(dest);
const char *p2=static_cast<const char*>(source);
if(p1>p2 && p1<p2+c_length)
{
//存在内存重叠区域
for(int i=c_length-1; i>=0; i--)
p1[i]=p2[i];
}
else
{
for(int i=0; i<c_length; i++)
p1[i]=p2[i];
}
return dest;
}
int main()
{
char source[]="Hello, My name is shark/n";
cout<<strlen(source)<<endl;
char dest[30];
memcpy_(&dest, &source, strlen(source));
cout<<dest<<endl;
getchar();
return 0;
}
#include<iostream>
using namespace std;
// 返回void *,可支持链式操作
void *memcpy_(void *dest, const void *source, unsigned int c_length)
{
assert(dest && source);
if(dest==source)return dest;
char *p1=static_cast<char*>(dest);
const char *p2=static_cast<const char*>(source);
if(p1>p2 && p1<p2+c_length)
{
//存在内存重叠区域
for(int i=c_length-1; i>=0; i--)
p1[i]=p2[i];
}
else
{
for(int i=0; i<c_length; i++)
p1[i]=p2[i];
}
return dest;
}
int main()
{
char source[]="Hello, My name is shark/n";
cout<<strlen(source)<<endl;
char dest[30];
memcpy_(&dest, &source, strlen(source));
cout<<dest<<endl;
getchar();
return 0;
}
相关文章推荐
- 服务器架构设计5------通过共享内存实现0拷贝
- C实现内存拷贝以及字符串拷贝函数
- 几个典型的内存拷贝及字符串函数实现
- 几个典型的内存拷贝及字符串函数实现
- Protocol Buffers 中实现ZeroCopyStream 来减少内存拷贝
- 内存拷贝,实现程序自身代码复制。
- 几个典型的内存拷贝及字符串函数实现
- 不用标准库实现memmove,借助一个缓冲区temp,即使src和dest所指的内存有重叠也能正确拷贝
- C语言 编写程序实现内存拷贝,不考虑内存重叠。不允许调用memcpy函数
- c语言内存管理函数,模拟memcpy、memmove(实现内存重叠拷贝)、memset
- 2.C语言实现函数void *memmove(void *dest, const void *src, size_t n)。memmove 函数的功能是拷贝src所指的内存内容前n个字节到dest所指
- 编写一个memmove函数,实现内存拷贝
- C语言中字符串拷贝(strcpy)与内存拷贝(memcpy)的实现
- C语言如何调用 memcpy 函数 实现内存拷贝
- C语言 编写函数实现内存重叠拷贝,不允许调用memmove函数
- C/C++面试之算法系列--几个典型的内存拷贝及字符串函数实现
- Protocol Buffers 中实现 ZeroCopyStream 来减少内存拷贝
- golang基础-数组、切片创建_内存_底层实现_修改值_拷贝_循环、string与切片
- 内存拷贝实现
- 几个典型的内存拷贝及字符串函数实现