写一个函数,完成内存之间的拷贝。[考虑问题是否全面]
来源:互联网 发布:蚂蚁网络电视官方下载 编辑:程序博客网 时间:2024/04/30 16:46
方法一:
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+cout )
{
char* pdest = static_cast<char*>( dest );
const char* psrc = static_cast<const char*>( src );
if( pdest>psrc && pdest<psrc+cout )
/*这种情况的话(把内存区域想象成一个坐标轴的横轴)就是目标地址在源地址的后面,有可能目标地址会和源地址发生重复,就是说假设dest[0]的内容就是src[5]的内容,那么从前向后复制的话,那src[0]的内容复制到了dset[0]里面去了,也就修改了src[5]的内容,造成src内存区域的内容破坏了。就只能从后向前复制。以下考虑的情况都可以这样的去想。*/
{
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( void )
{
char str[] = "0123456789";
mymemcpy( str+1, str+0, 9 );
cout << str << endl;
system( "Pause" );
return 0;
}
{
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( void )
{
char str[] = "0123456789";
mymemcpy( str+1, str+0, 9 );
cout << str << endl;
system( "Pause" );
return 0;
}
方法二:
void* mymemcpy(void* dest, void* source, size_t count)
{
void* ret = dest;
if (dest <= source || dest >= (source + count))
{
//Non-Overlapping Buffers
//copy from lower addresses to higher addresses
while (count --)
*dest++ = *source++;
}
else
{
//Overlapping Buffers
//copy from higher addresses to lower addresses
dest += count - 1;
source += count - 1;
while (count--)
*dest-- = *source--;l
}
return ret;
}
- 写一个函数,完成内存之间的拷贝。[考虑问题是否全面](转)
- 写一个函数,完成内存之间的拷贝。[考虑问题是否全面]
- 写一个函数,完成内存之间的拷贝。[考虑问题是否全面](转)
- 写一个函数,完成内存之间的拷贝。[考虑问题是否全面](转)
- 写一个函数,完成内存之间的拷贝。[考虑问题是否全面]
- 面试准备(字符串类)写一个函数,完成内存之间的拷贝(考虑全面)
- 写一个函数,完成内存之间的拷贝
- 写一个函数,完成内存之间的拷贝
- 写一个函数,完成内存之间的拷贝
- 写一个函数,完成内存之间的拷贝
- 完成内存之间的拷贝
- 写一个内存拷贝函数
- 写一个内存拷贝函数
- 考虑了内存重叠的字符串拷贝函数strcpy
- 汇编写的内存拷贝函数
- 汇编写的内存拷贝函数
- 面试题目写一个内存拷贝函数memcpy()
- C-不用任何库函数,写一个内存拷贝函数
- PHP中define常量的实现
- Android开发性能优化简介
- Android编译系统详解(三)
- C/C++变量在内存中的分布
- PID算法的C语言实现
- 写一个函数,完成内存之间的拷贝。[考虑问题是否全面]
- 黑马程序员_C#编程基础
- Intent的用法
- 黑马程序员---IO流后半部分总结
- 完全清除Oracle数据库
- 秒杀多线程第五篇 经典线程同步 关键段CS
- 坑爹的editplus自动补全
- 通过.ko获取内核全局变量(jiffies)
- 谁是中国移动互联网的王者?360发布定制手机消息随感