Классический выпуск. Вы можете просто справиться с этим (и заметить, что sizeof (foo) может быть отключен более чем на единицу, если компилятор округляет размер структуры, что разрешено), или вы можете сделать что-то вроде этого:
struct packetheader {
int id;
int filename_len;
};
struct packet {
struct packetheader h;
char filename[1];
};
Это раздражает (вы должны использовать h.id и т. Д.), Но это работает. Обычно я имею дело с тем, что он один, но вышеперечисленное может быть несколько более портативным.