Копирование массивов структур в C

У меня ничего не получалось, пока я не последовал этому ответу - удалил связанную ссылку из Проекта / Ссылки и затем добавил ее снова.

6
задан Víctor 7 November 2009 в 17:48
поделиться

5 ответов

Это должно сработать:

memcpy(&b, &a, sizeof(a));

РЕДАКТИРОВАТЬ : Кстати: он сохранит копию a в b .

17
ответ дан 8 December 2019 в 14:43
поделиться

Это похоже на плохо замаскированное домашнее задание ... В любом случае, учитывая заранее определенный формат вызова для copySolution в исходном сообщении, правильное определение copySolution будет выглядеть следующим образом

void copySolution(struct group (*a)[4], struct group (*b)[4])
{
  /* whatever */
}

Теперь внутри copySolution вы можете копировать массивы любым способом. Либо используйте цикл

void copySolution(struct group (*a)[4], struct group (*b)[4])
{
  const struct group *pb, *pbe;
  struct group *pa;

  for (pa = *a, pb = *b, pbe = pb + sizeof *b / sizeof **b; 
       pb != pbe; 
       ++pa, ++pb)
    *pa = *pb;
}

, либо memcpy , как было предложено выше

void copySolution(struct group (*a)[4], struct group (*b)[4])
{
  memcpy(b, a, sizeof *b);
}

. Конечно, сначала вы должны решить, в каком направлении вы хотите, чтобы ваши массивы копировались. Вы не предоставили никакой информации, поэтому все просто прыгнули к какому-то выводу.

0
ответ дан 8 December 2019 в 14:43
поделиться

Компилятор не имеет информации о размере массива после передачи их в качестве указателя в функцию. Поэтому вам часто нужен третий параметр: размер копируемых массивов.

Решение (без проверки ошибок) может быть таким:

void copySolution(struct group* a, struct group* b, size_t size) {
    memcpy(a, b, size * sizeof(*a));
} 
-1
ответ дан 8 December 2019 в 14:43
поделиться

Вероятно, самый простой способ -

 b=a

, хотя решение с memcpy () также будет работать.

-3
ответ дан 8 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: