Структуры переменной размерности
При создании структуры в динамической памяти возможен вариант, когда размерность ее является переменной. В этом случае функции, создающие такие структуры, должны вычислять ее текущий размер для функции malloc. Рассмотрим пример хранения в структуре строки переменной длины. В определении переменная часть представлена массивом нулевой размерности. При создании динамической переменной резервируется память под фиксированную часть структуры и текущую размерность переменной части -длину строки:
struct man
{
char name[30]; // Фиксированная часть
int dd,mm,yy;
char address[]; // Переменная часть
};
man *create()
{
man *p;
char xxx[200];
gets(xxx); // Ввод значения элемента address
p = malloc(sizeof(man) + strlen(xxx) + 1);
strcpy(p->address, xxx);
// Ввод фиксированной части
return p;
}