У меня ничего не получалось, пока я не последовал этому ответу - удалил связанную ссылку из Проекта / Ссылки и затем добавил ее снова.
Это должно сработать:
memcpy(&b, &a, sizeof(a));
РЕДАКТИРОВАТЬ : Кстати: он сохранит копию a
в b
.
Я просто хочу отметить, что вы можете копировать структуры как обычные типы:
for (i=0; i<4; i++) {
b[i] = a[i]; /* copy the whole struct a[i] to b[i] */
}
Это похоже на плохо замаскированное домашнее задание ... В любом случае, учитывая заранее определенный формат вызова для 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);
}
. Конечно, сначала вы должны решить, в каком направлении вы хотите, чтобы ваши массивы копировались. Вы не предоставили никакой информации, поэтому все просто прыгнули к какому-то выводу.
Компилятор не имеет информации о размере массива после передачи их в качестве указателя в функцию. Поэтому вам часто нужен третий параметр: размер копируемых массивов.
Решение (без проверки ошибок) может быть таким:
void copySolution(struct group* a, struct group* b, size_t size) {
memcpy(a, b, size * sizeof(*a));
}
Вероятно, самый простой способ -
b=a
, хотя решение с memcpy ()
также будет работать.