один момент. Возвращаю указатель на структуру:
struct man *input()
{
...
struct man *man = (struct man*)malloc(sizeof(struct man) + strlen(addr) + 1);
...
return man;
}
И если работаю с ней как с одной структурой, то всё ок:
struct man *people = input();
output(people, size);
А как их можно в массив положить? Массив структур или массив указателей на структуру. Уже всякие книжки перелистал, и пока не понимаю.
В вашем случае массив указателей на структуру нужен. И не очень понятно, зачем вам там strlen(addr) + 1 в malloc.
Там получается в addr динамическая строка
видимо, резиновая структура, с последним мембером в виде массива неопределенной длины
Сама структура: struct man { char name[NAME_LENGTH]; int dd,mm,yy; char addr[]; };
без указателей в массив не лягут
Не совсем
выделяйте память под sizeof(struct man*)*N, где N число элементов в массиве и помещайте туда указатели на man ранее выделенные
Ну это я делаю struct man *people = (struct man *) malloc (sizeof(struct man) * MAX_PEOPLE);
Нет, ты делаешь другое
так не получится, должно быть MAX_PEOPLE аллокаций и struct man** people
struct man **people = (struct man **) malloc (sizeof(struct man*) * MAX_PEOPLE);
Обсуждают сегодня