Hallo Jörn,

da gibt es einige Sache in dem Code.
Code:
char * main_cat[4];
Hiermit reservierst du 4 Byte für 4 Zeiger auf char.

Code:
main_cat[0] = "---Hauptmenu---";
main_cat[1] = "Beep";
main_cat[2] = "Nix";
main_cat[3] = "Nix2";
main_cat[4] = "";
Das passt nie und nimmer in vier Byte

Du suchst:
Code:
char main_cat[5][16] ={"---Hauptmenu---",
                      "Beep", ...

                      ""};
Das gleich gilt natürlich auch für sub_cat.
Die 5 steht für 5 Elemente und nicht für den größten Index. Die 16 Bytes werden gebraucht, da ein String immer mit einer 0 abschließt.

Jetzt musst du noch Zeiger beim Funktionsaufruf übergeben.
foo (&main_cat[1][0]);
Zeigt auf den Anfang von Beep.
Wenn du jetzt noch in der Deklaration der Funktion einen einfachen Zeiger auf char angibst, sieht das bestimmt schon viel besser aus.


Gruß

Jens