移动一个数组并使用memcpy在给定位置插入一个新元素

时间:2012-03-28 15:52:37

标签: c++ position memcpy shift

我需要移动数组并使用memcpy在给定位置插入新元素。

Input: 2, 5, 7, 0, 0, 0

Expected output: 2, 3, 5, 7, 0, 0

Actual output: 2, 3, 5, 0, 0, 0

我的memcpy有错吗? (我必须使用数组 - 而不是std::vectors

#include <stdio.h>
int main()
{
    int i=0;
    int len=0;
    int a[6] = {'\0'};
    a[0]= 2;
    a[1] = 5;
    a[2]= 7;
    len=3;
    int b=0;
    b = 2;
    memcpy(a+2, a+1, b * sizeof(int));
    //memcpy(a+2, a+1, sizeof(int) * (len-1));
    a[1]=3;
    for(i=0;i<6;i++)
        printf("after %d \n", a[i]);
}

2 个答案:

答案 0 :(得分:6)

来自memcpy的联机帮助页:

  

内存区域不应重叠。如果内存区域重叠,请使用memmove(3)。

完整性,来自C99标准:

  

如果在重叠的对象之间进行复制,则行为未定义。

答案 1 :(得分:0)

你实际上正在复制5(a[1]),但它正在写7(a[2]

你需要先添加另一个memcpy来复制7条目,然后你可以复制5条。

然而,由于你在技术上移动记忆,我会建议Mike Seymour说的话,做一个memmove:

http://www.cplusplus.com/reference/clibrary/cstring/memmove/