memcpy()和memmove()都是从一块内存拷贝内容去另外一块内存。区别在于memcpy()不考虑内存重叠,容易出错,memmove()考虑内存重叠,保证安全。
memcpy()
void* memcpy(void *dest, void *src, size_t size)
{
if(dest == nullptr || src == nullptr||size<=0)
return nullptr;
char *p=(char *) dest;
char *q=(char *) src;
while(size--)
{
*p++=*q++;
}
return dest;
}
memmove()
void *memcpy(void *dest, void *src, size_t size)
{
if(dest == nullptr || src == nullptr)
return nullptr;
char *p=(char *) dest;
char *q=(char *) src;
if(dest < src || (char*)src+size < (char*)dest)//没有内存重叠
{
while(size--)
{
*p++=*q++;
}
}
else//有内存重叠
{
p = p+size-1;
q = q+size-1;
while(size--)
{
*p--=*q--;
}
}
return dest;
}