您的位置:首页 > 其它

关于拷贝时内存重叠与不重叠的问题

2018-03-13 15:36 274 查看
C++里有两种拷贝方式,一种是strcpy,一种是memcpy
实现如下:
#include<iostream>
using namespace std;
#include<assert.h>
char* MyStrcpy(char* dest,const char* src)
{
assert(src!=NULL&&dest!=NULL);
char* tmp = dest;
while (*src!='\0')
{
*(dest++) = *(src++);
}
*dest = '\0';
return tmp;
}
char* MyMemcpy(char*dest,const char* src,int n)
{
assert(dest != NULL&&src != NULL);
char* tmp = dest;
if (tmp >= src&&tmp <= src + n - 1)
{
tmp = tmp + n - 1;
src = src + n - 1;
while (n--)
{
*tmp-- = *src--;
}
*tmp = '\0';
}
else
{
while (n--)
{
*tmp++ = *src++;
}
*tmp = '\0';
}
return dest;
}
void test()
{
char s1[] = "hello";
char s2[] = "world";

cout << MyStrcpy(s1, s2) << endl;
cout << MyMemcpy(s1, s2, 3) << endl;
}在实现拷贝时需要注意几个细节:
1、返回值为char* ,因为返回dst的原始值使函数能够支持链式表达式。
链式表达式的形式如:
int l=strlen(strcpy(strA,strB));
又如:
char * strA=strcpy(new char[10],strB);
返回strSrc的原始值是错误的。
2、拷贝完成之后,要注意'\0'的拷贝是否被拷贝上了
3、传参时将源目标前加上const
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: