2011-09-25 64 views
0

我正在开发Cocoa/Xcode,并且有一个int *包含值的数组。 当我想使用memcpy来移动数组中的值时,它只传输0。memcpy问题

例如

  • 数组包含值1 2 3 4
  • memcpy(array,array+2*sizeof(int),2*sizeof(int));

结果:0,0,3,4

有没有更好的替代memcpy的,或者说我做错了?

回答

7

我觉得做你想要什么是正确的做法是:

memcpy(array, array + 2, 2*sizeof(int)); 

这是因为在memcpy的指针运算的第二个参数正在做,而这被添加到“数组”的指针被认为是什么是整数大小的倍数。所以在这种情况下,“数组+2”意味着“整数指针数组加上两倍于整数的大小”。

+2

我个人更喜欢“memcpy(array,array + 2,2 * sizeof array [0]);”。将独立于阵列的类型,即使在宏中。 – wildplasser

+0

你是我的英雄,谢谢:-) –

0

memcpy的联机帮助页说,区域不应该重叠。试试memmove。

+0

谢谢,但区域在这里不重叠,因为我只是将3和4复制到1和2.试图与memmove然而结果是不幸的是相同的... –

+0

为什么在世界上你会使用'memcpy 'for 2'int's而不是只写'array [0] = array [2];阵列[1] =阵列[3];'?? –