2011-02-08 190 views
0
struct item_CHECK_LIST_data 
{ 

    char list[MAX_CHECK_LIST_OPTIONS + 1][MAX_ITEM_TEXT_LEN]; 
    char checkeditems[MAX_CHECK_LIST_OPTIONS + 1];//which are checked 

    char number_of_options; 
}; 

我可以複製這與memcopy?memcopy和2d陣列

我有一個奇怪的錯誤,會通過存儲器複製解釋不能夠...

+2

你的「怪異的bug」更可能是你自己的,而不是memcpy ....請發佈你的代碼。 –

+0

你可以發佈給你這個問題的代碼。 –

+1

什麼是「memcopy」?準確的話你會得到更多有用的答案。 –

回答

5

是的,你可以在C memcpy二維數組,前提是他們是真正的二維數組,而不是一維指針數組。二維數組在內存中連續佈局,因此memcpy將正確讀取所有塊。然而,如果你的數組是一維數組,指向更多的一維數組,那麼memcpy將只複製指針,你將得到一個淺拷貝而不是深拷貝。

2

您是否使用sizeof()來查找要複製多少?結構的元素可能被填充,所以其大小大於部分的總和。

+0

'char'應該沒有填充。 OP正在複製包含在結構中的數組,而不是結構本身。 –

+1

@Chris這並不完全清楚。 –

+0

@Jim - 對不起。由於奇怪的原因,我只能從我的iPhone上使用SO,並且輸入時間很長。正如我讀到的,OP的問題是關於複製2D'char'數組(這恰好是'struct'的成員),而不是2D'struct'數組,因爲這個答案似乎是假設的。 'N'和'sizeof(char [N])'應該沒有區別,所以@ Martin的答案在這裏並不是很有用(儘管它在更一般的情況下)。 –

0

如果它只是您要複製的整個結構,請不要使用memcpy。只需做一個任務,=令牌就是爲此做的。