Ваш цикл чтения заставляет все узлы указывать на один и тот же статический массив:
static char buffer[1024];
while (fgets(buffer, 1024, file)) {
child *new = (child *)malloc(sizeof(child));
new->name = buffer;
new->next = (*head);
(*head) = new;
}
Вместо этого вам следует выделить копию строки для каждого узла:
char buffer[1024];
while (fgets(buffer, sizeof buffer, file)) {
child *new_node = (child *)malloc(sizeof(child));
new_node->name = strdup(buffer);
new_node->next = *head;
*head = new_node;
}
ЭтоТакже рекомендуется проверять ошибки выделения памяти и избегать использования ключевых слов c ++.Вы также можете удалить завершающий символ новой строки из буфера и любых начальных или конечных пробелов.