这是我的输入数组
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
答案 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))