最近老师叫我们写个内存拷贝函数 即memcpy
上网查了一下
基本上都是如下的答案:
void *(void *dest, const void *src, unsigned int n)
{
char *Dest = (char*)dest;
char *Src = (char*)src;
while(n- -)
{
*Dest ++ = *Src++;
}
return dest;
}
上述拷贝是不考虑内存拷贝时发生重合的写法,也就是自己给自己拷贝
#include<stdio.h>
#include<memory.h>
void main()
{
char a[5] = "Love";
memcpy(a + 1,a ,5)
printf("%s/n",a);
}
如果按上述拷贝得出的结果是LLLLL
而库函数得出的结果是LLove
显然上述答案有问题
于是又了下面的做法:
void *memcpy(void *dest, const void *src ,unsigned int n)
{
char *Dest = (char*)dest;
char*Src = (char*)src;
if (Dest <= Src || Dest >= Src + n) //判断内存拷贝区域不重合的情况
{
while(n - - )
{
*Dest++ = *Src++;
}
}
else
{
Dest = Dest +(n - 1);
Src = Src + (n - 1);
while(n- -)
{
*Dest - - = *Src - -;
}
}
return dest;
}
这才是内存拷贝函数memcpy的正确写法!!!!!