C++面试--实现一个Memcpy函数

来源:互联网 发布:网络短剧 搞笑 编辑:程序博客网 时间:2024/05/22 03:07
char *strcpy(char *dest,char *src)
{
if (src == NULL || dest == NULL)
return NULL;
char *strdest = dest;
char *strsrc = src;
while ((*strdest++ = *strsrc++) != '\0');
return dest;
}
void *memcpy_(void *memTo,const void *memFrom, size_t size)
{
if (memTo == NULL || memFrom == NULL)
return NULL;
void *res = memTo;
if(memTo > memFrom && (char*)memTo < (char*)memFrom + size)
{//内存有重叠,从高地址开始复制
memTo = (char*)memTo + size - 1;
memFrom = (char*)memFrom + size - 1;
while(size--)
{
*(char*)memTo = *(char*)memFrom;
memTo = (char*)memTo - 1;
memFrom = (char*)memFrom - 1;
}
}
else//内存没有重叠,从低地址开始复制
while(size--)
{
*(char*)memTo = *(char*)memFrom;
memTo = (char*)memTo + 1;
memFrom = (char*)memFrom + 1;
}
return res;
}
strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
0 0