Цитата(prottoss @ Jul 30 2007, 14:51)

Хм... Я, конечно, не знаю, как Вы там в программе работаете с этими структурами, но
Обычно в таких случаях либо концевой массив содержит нечто "самоограниченное" (null-terminated string, массив указателей с NULL как ограничителем), либо его размер находится в самой структуре. Например, эта структура - заготовка для кольцевого буфера, делаем malloc( sizeof(этой_структуры) + buffer_len) и присваиваем нужному полю buffer_len.
Цитата
как, допустим, определить массив Ваших структур??? И как, допустим, в цикле их перебирать если все структуры разной длины???
А никак. Массив [] - это incomplete array, структура с ним в конце - incomplete type, по стандарту из них массивы не собираются. Естественно, массивы из указателей на них - запросто и в цикле перебирается :-)
Цитата
Кстати, можете показать код инициализации члена Text[] структуры Menu_Item? Что то у меня не получилось

Без проблем.
Код
typedef struct {
int i;
char c[];
} s;
s s1 = { 1, "abc" };
s s2 = { 1, "qwerty" };
struct {
int i;
int ii[];
} ss = { 1, {1, 2, 3} };
avr-gcc -S
CODE
.file "f.c"
.arch avr2
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
.global __do_copy_data
.global __do_clear_bss
.global s1
.data
.type s1, @object
.size s1, 2
s1:
.word 1
.string "abc"
.global s2
.type s2, @object
.size s2, 2
s2:
.word 1
.string "qwerty"
.global ss
.type ss, @object
.size ss, 2
ss:
.word 1
.word 1
.word 2
.word 3
/* File "f.c": code 0 = 0x0000 ( 0), prologues 0, epilogues 0 */
Кстати, до введения этого в стандарт выкручивались, задавая размер 1. В некоторых компиляторах можно было задать 0, чтобы sizeof от типа не включал сам массив, т.е. чтобы в malloc можно было писать не неестественное
malloc( sizeof(ring_buf_t) + buf_size - 1); // один элемент есть в структуре
а нормальное
malloc( sizeof(ring_buf_t) + buf_size);
Но проблемой этих выкрутасов было в том числе то, что компилятор не запрещал создать массив таких структур. А теперь может выдать ошибку.