C语言标准库函数memcpy和memmove的区别以及内存重叠问题处理

时间:2023-03-09 21:45:06
C语言标准库函数memcpy和memmove的区别以及内存重叠问题处理

①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不保证拷贝的结果的正确。

②内存重叠有以下两种情况

C语言标准库函数memcpy和memmove的区别以及内存重叠问题处理

③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;
}