memmove仅复制第一个元素

XZ6H

这是我的输入数组

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

乌里·布雷彻(Uri Brecher)

memmove的原型是:

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

num的单位是字节(正如您在问题中也提到的那样)。

在您的问题中,您省略了“ ele”的类型。如果“ ele”的类型为char *或类似的值(例如uint8_t *),则代码应能按预期工作。但是,如果“ ele”的类型为int *,则数组中的每个项目通常占用4个字节(对于32位处理器),这将解释为什么仅复制一个数组项。

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

memmove(目标,源,elem_count * sizeof(elem_type))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章