Q:

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

Есть массив структур который нужно заполнить:
typedef struct {
  int size;
  char** key;
  char** value;
} MATCHING[somesize];
      ||
MATCHING t[l.size];

заполняется через цикл в котором обьявляется такая же структура
MATCHING t[l.size];
  for (size_t i = 0; i < l.size; i++) {
    MATCHING tmp = getTask(id_task, id_author, id_performer);
  }

id_task, id_author, id_performer - данные необходимые для работы функции
Через оператор присваивания = не получается корректно. Каждый элемент массива становится равен структуре которая была при последней итерации цикла.
Пробоал еще так копировать:
MATCHING copyMap(const MATCHING l) {
    MATCHING* tmp = (MATCHING*)malloc(sizeof(l));
    tmp->size = l.size;
    for (int i = 0; i < l.size; i++) {
      strcpy(tmp->key[i], l.key[i]);
      strcpy(tmp->value[i], l.value[i]);
    }
    return *tmp;
}

но на strcpy SIGSEGV
Как правильно нужно копировать?

A:

Странный какой-то у Вас цикл присваивания... Может быть Вы имели в виду так:
MATCHING t[l.size];

  for (size_t i = 0; i < l.size; i++) {
    t[i] = getTask(id_task, id_author, id_performer);
  }

