我正在try 创建一个类似于Memmove的函数.我在中发现,复制是通过包括一个过渡数组来完成的,首先将字节复制到其中,该数组不应该与DEST重叠,然后再复制到目标.这是我试图编写的代码(包括必要的标头):
void *ft_memmove(void *dest, const void *src, size_t n)
{
unsigned char p[n];
unsigned char *p2;
const unsigned char *p3;
size_t i;
p2 = dest;
p3 = src;
i = 0;
while (i < n)
*(p + i++) = *(p3++);
while (n--)
*(p2++) = *(p++);
return (dest);
}
我认为这个问题与将常量空数组的元素赋给p有关,而它是一个常量或类似的东西.我应该使用Malloc,还是有其他可能的方法?或者,我对Memmove实际上是如何工作的理解是错误的,因为我在其他地方找到了其他定义.
我在这个Main上运行了前面的代码:
int main()
{
char s1[] = "holala";
char s2[] = "dongo";
ft_memmove(s1, s2, sizeof(s2));
printf("%p,\n", s1);
}
它应该显示"donga",但我得到了这个错误:
ft_memmove.c:17:22: error: lvalue required as increment operand
17 | *(p2++) = *(p++);