2010-12-10 62 views
1

请你能帮助我吗? 如何将一个int数组的一部分复制到另一个int数组中?如何将int数组的一部分复制到C/C++中的另一个int数组中?

例子:

typedef struct part { 
    int * array; 
} PART; 

int array[] = {1,2,3,4,5,6,7,8,9}; 
PART out[] = new PART[3]; 

for (int i = 0; i < 3; i++) 
{ 
    memcpy((char *)array[i * 3], (char *)out[i].array, 3 * sizeof(int)); 
} 

但是,这不工作... :(

+2

除了下面的答案,你的使用'memcpy'可能是错误的。 memcpy的第一个参数是_destination_,而不是源。 – lijie 2010-12-10 19:03:29

+2

我看到你的问题有C++标记,如果是的话,不要用“typedef struct”丑化你的代码,不要使用memcpy,C++有std :: copy。仅为宏使用ALL_CAPS名称也是一个好主意。 – 2010-12-10 19:08:33

回答

7

好的,你有3个问题。

  1. 你铸造一个int为char * (char *)array[i * 3]

    你真正的意思是(char *)&array[i * 3]。即采取第i * 3个元素的地址。

  2. 您试图从未初始化的阵列中复制数据。

    你应该分配内存给[i] .array。

  3. 你似乎有你的memcpy错误的方式。

下面的代码将更好地工作:

typedef struct part { 
    int * array; 
} PART; 

int array[] = {1,2,3,4,5,6,7,8,9}; 
PART out[] = new PART[3]; 

for (int i = 0; i < 3; i++) 
{ 
    out[i].array = new int[3]; 
    memcpy((char *)out[i].array, (char *)&array[i * 3], 3 * sizeof(int)); 
} 

请务必记得删除[]分配的内存来了[我] .array ...

+0

谢谢,实际上,在真正的问题中,我在struct中初始化数组,并使用memcpy和正确的参数顺序,问题出现在“&”中。 再次感谢你,愚蠢的错误...... :) – 2010-12-10 19:28:55

+0

@塞巴斯蒂安:如果答案解决了你的问题,可以通过点击我帖子左上方的“剔号”自由接受我的答案:) – Goz 2010-12-10 21:39:04

3

你需要做memcpy之前* array分配内存

事情是这样的:

typedef struct part { 
    int * array; 
} PART; 

int array[] = {1,2,3,4,5,6,7,8,9}; 
PART out[] = new PART[3]; 

for (int i = 0; i < 3; i++) 
{ 
    out[i].array = malloc(9*sizeof(int)); 
    // will copy 9 array values into out[i].array 
    memcpy(out[i].array, array, 9 * sizeof(int)); 
} 
+0

更具体地说,你有一个PART数组。该结构内的“int * array”未初始化。它必须被初始化。 – 2010-12-10 19:01:33

+0

erm。我认为他在每个PART中只需要3个int。 – lijie 2010-12-10 19:06:53

+0

是不是他试图在每个“PART”上复制整个数组? – 2010-12-10 19:12:28

1

的结构部分这是无关紧要的。你正在尝试做的可以用这种方式来完成:

int src[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; 
int part[3][3]; 

for (int i = 0; i < 3; ++i) 
{ 
    std::copy(src + (3 * i), src + (3 * (i + 1)), part[i]); 
} 

一个更好的解决方案可以通过使用std::vector而不是C风格的数组来完成:

std::vector<int> a(src, src + 9); 
std::vector<std::vector<int> > b; 

for (int i = 0; i < 3; ++i) 
{ 
    std::vector<int> c(a.begin() + (3 * i), a.begin() + (3 * (i + 1))); 
    b.push_back(c); 
} 
相关问题