①memcpy()和memmove()都是C语言中的标准库函数,定义在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:
void *memcpy(void *dst, const void *src, size_t count);
void *memmove(void *dst, const void *src, size_t count);
他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。
②内存重叠有以下两种情况
③memcpy()和memmove()实现
void* memcpy(void* dst, const void* src, size_t n)
{
char* dstPtr = (char*)dst;
char* srcPtr = (char*)src; if((dstPtr != NULL) && (srcPtr != NULL) && (n > ))
{
while(n--)
{
*dstPtr++ = *srcPtr++;
}
} return dst;
}
void* memmove(void* dst, const void* src, size_t n)
{
char* dstPtr = (char*)dst;
char* srcPtr = (char*)src; if((dstPtr != NULL) && (srcPtr != NULL) && (n > ))
{
if((srcPtr < dstPtr) && (dstPtr < (srcPtr + n)))
{
do
{
*(dstPtr + n - ) = *(srcPtr + n - );
}while(--n);
}
else
{
while(n--)
{
*dstPtr++ = *srcPtr++;
}
}
} return dst;
}