memcpy函数的作用:
将由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内,函数返回一个指向dest的指针。
想必大多数人在面试时被要求写 memcpy的实现,很不幸,我也吃过这个亏(这种题要是写的一塌糊涂后面完全没戏),所以还是得提前准备一下,不然就只能呵呵了。
先来看看一段错误的示范: 找茬
void * memcpy(void *dest, const void *src, unsigned int count);
{
if ((src == NULL) || (dest == NULL))
return;
while (count--) *dest++ = *src++;
return dest;
}
特别说明:
1、与strcpy相比,memcpy遇到'\0'不会结束,而是一定要拷贝完n个字节,所以要指定拷贝的数据长度
2、memcpy可以拷贝任何数据类型的对象,如果dest和src的指针类型不一样,也需要处理,不能直接++使地址自增(例如: int* p和 char*q, p++指针的值是4个4个加(0,4,8),q++是1个1个加(0,1,2,3,4))
3、如果dest本身就有数据,执行memcpy()之后会覆盖原有的数据,所以src和dest所指向的内存区域不能有重叠
4、不能改变形参的值,定义新的临时变量来操作
5、参数提供的地址可能为空
完善后的代码:
void *memcpy(void *dest, const void *src, size_t count)
{
if (dest == NULL || src == NULL )
{
return NULL;
}
char *tmp_dest = dest;
const cha