memmove只复制第一个元素

时间:2016-04-24 05:39:00

标签: c++

这是我的输入数组

  

0 0 0 3 4 5 6 7 0 0 0 0 0 0 0 0 0 0 0 0

我期望输出数组使用memmove或memcpy

  

0 3 4 5 6 7 6 7 0 0 0 0 0 0 0 0 0 0 0 0

这是我的代码

int front = 3,rear = 7;
memmove(ele+1,ele+front,rear-front);

到目前为止,我对memmove的理解是,它将前后(4)字节从ele + front(3)复制到ele + 1(1)。
那么输出如何错误?

输出上述代码:

  

0 3 0 3 4 5 6 7 0 0 0 0 0 0 0 0 0 0 0 0

1 个答案:

答案 0 :(得分:0)

memmove的原型是:

void * memmove ( void * destination, const void * source, size_t num );

其中num以字节计算(正如您在问题中提到的那样)。

在你的问题中,你省略了“ele”的类型。当“ele”是char *类型或类似的东西(例如uint8_t *)时,代码应该按预期工作。 但是,如果“ele”的类型为int *,那么数组中的每个项通常需要4个字节(对于32位处理器),这就解释了为什么只复制了一个数组项。

您应该调用memmove,其大小乘以每个元素的大小,如下所示:

memmove(target,source,elem_count * sizeof(elem_type))