2011-02-08 4 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 массивы

У меня есть странная ошибка, которая будет объяснена memcopy не в состоянии ...

+2

Ваша «странная ошибка» скорее всего будет вашей, а не memcpy .... пожалуйста, напишите код. –

+0

Вы можете опубликовать код, который дает вам эту проблему. –

+1

Что такое «memcopy»? Вы получите более полезные ответы, будучи точным. –

ответ

5

Да, вы можете memcpy двумерные массивы в C, при условии, что они на самом деле 2D массивов и не 1D массив указателей. Двумерные массивы выкладываются смежно в памяти, поэтому memcpy будет правильно читать все блоки. Однако, если ваш массив является 1D-массивом указателей на более 1D-массивы, то memcpy будет копировать указатели, и вы получите неглубокую копию, а не глубокую копию.

2

Вы использовали sizeof(), чтобы найти, сколько копировать? Элементы структуры могут быть дополнены таким образом, чтобы размер был больше, чем сумма частей.

+0

'char' не должно иметь прокладки. OP копирует массив, содержащийся в структуре, а не сама структура. –

+1

@ Chris Это совсем не ясно. –

+0

@ Jim - Извините. Я могу использовать SO только с моего iPhone по нечетным причинам, и это займет много времени. Вопрос OP, как я его прочитал, заключается в копировании массива 2D 'char' (который является членом' struct'), а не массива 2D 'struct', который, как кажется, предполагает этот ответ. Между 'N' и' sizeof (char [N]) не должно быть никакой разницы, поэтому ответ Мартина на самом деле здесь не очень полезен (хотя это в более общем случае). –

0

Если это просто структура в целом, которую вы хотите скопировать, не используйте memcpy. Просто выполните задание, для этого сделан токен =.