我需要移动数组并使用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]);
}
答案 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/