Hi *,
ich stehe vor folgendem Problem:
Ich habe eine Grafikroutine, die soll ein (Text-)Menü mit mehreren
Auswahlmöglichkeiten zeichnen. Außerdem ist die Routine animiert, das
bedeutet, ich muß ihr mehrere Texte übergeben, die dann immer Pixelweise
verschoben werden.
Das Problem ist, dass jedes Menü unterschiedlich ist, mal sind es 10
Möglichkeiten, mal nur 5.
Ein Struct dagegen ist ja mehr oder weniger fest definiert.
Struktur im Menü:
{
unsigned char Menueueberschrift[10];
unsigned char AnzahlMenueItems;
unsigned char Menueitems[][10]; //Das mag der CodeVision nicht, ein
// char-array muss in jeder dimension festgelegt werden,
// also z.B. Menuitems[5][10]
// würde aber ne gigantische Platzverschwendung, wenn ich mal
// ein menü mit nur einem statt 5 items hätte
}
Also z.B.
{
"TESTHead1"
2
{"Test12345", "Test15"}
}
aber auch
{
"TESTHead2"
4
{"Test12349", "Test17", "Test14", "Test1"}
}
Selbstverständlich könnte man die Anzahl der Items irgendwo
rausbekommen, ich weiß nur nicht mit welcher Funktion. Aber wie kann ich
so einen "variablen" struct definieren und wie sähe die
Funktionsdefinition aus?
void glcd_drawMenu(flash struct *lalala, char oldItem, char
selectedItem) {
//tu was
}
Anmerkung: die beiden Chars brauche ich für die Animation, damit ich
weiß, von wo nach wo ich scrollen muss...
Danke,
Christoph
Du kannst ein array of pointers machen:
const char *s[] = { "Hi", "low", "foo", "bar"};
Wenn du das aber zum Bestandteil einer struct machen willst, dann
setzt das voraus, dass der Compiler "flexible array members" gemäß
C99 kennt (GCC, in dessen Forum du ja postest, kann das), und dieses
Array muss sich am Ende der struct befinden. Leider lässt sich der
Trick "sizeof(array) / sizeof(array[0])" für ein solches in der
Initialisierung nicht anwenden, du musst die Elemente also schon
mit der Hand zählen.
Der Speicherplatz für die Strings selbst wird dabei vom Compiler
anonym belegt, und es wird nur ein Zeiger auf den Anfang eines jeden
Strings im Array gespeichert.