简单的内存拷贝函数的实现:
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while (count--)
*tmp = *s ;
return dest;
}
注意到,当原内存和目的内存存在
内存重叠
时,这个拷贝函数是错误的,先前填充的值会覆盖掉还未进行拷贝的值。
改进后的内存拷贝函数:
void *memcpy(void *dst, const void *src,size_t size)
{
char *psrc;
char *pdst;
if(NULL == dst ||NULL == src)
{
returnNULL;
}
if((src < dst)&& (char *)src + size > (char *)dst) // 自后向前拷贝
{
psrc= (char *)src + size - 1;
pdst= (char *)dst + size - 1;
while(size--)
{
*pdst--= *psrc--;
}
}
else//从前向后拷贝
{
psrc= (char *)src;
pdst= (char *)dst;
while(size--)
{
*pdst++= *psrc++;
}
}
return dst;
}