2010-12-10 63 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); 
} 
相關問題