完善代码
memcpy是一个内存拷贝函数,常用于将一个内存区域的内容复制到另一个内存区域。然而,官方memcpy函数在处理重叠内存区域时可能会出现不可预知的结果,因此需要对其进行完善。
以下是一个完善了重复问题的memcpy函数的示例代码:
void *my_memcpy(void *dest, const void *src, size_t n)
{
char *pdest = (char *) dest;
const char *psrc = (const char *) src;
if (pdest == psrc) {
// 如果源和目的地内存区域重叠
return dest; // 直接返回目的地指针,不做任何操作
}
if (pdest < psrc) {
// 如果源内存区域在目的地内存区域之前,就从前往后拷贝
for (size_t i = 0; i < n; i++) {
pdest[i] = psrc[i];
}
} else {
// 如果源内存区域在目的地内存区域之后,就从后往前拷贝
for (size_t i = n; i >