zurück zum TOP:
nein, reservierten Speicherbereich hast du nicht, du musst dafür jeden der 128 char arrays bei der Deklaration mit festen cstrings vor-belegenchar** myarray;
Bekomme ich hier ein Array mit reserviertem Speicherplatz für 128 Pointer (char*)?
char** myarray = {"dies ist der 1. cstring","dies ist der 2. cstring","dies ist der 3. cstring","dies ist der 4. cstring",...}
- sonst schreibst du wild ins RAM hinein.
char** myArray ist ja nur eine Anfangs-Adresse für eine beliebige Liste unbekannter Länge mit 1 Pointer auf eine (einzelne) char-Speicheradresse,
und
char* myArray[128] ist nur eine Anfangs-Adresse für eine 128er Liste mit je 1 Pointer auf eine (einzelne) char-Speicherzelle
Den reservierten Speicher hast du nur mit
char myArray[128][100]; // 128 x char array zu je 100 char Länge
wenn du dies an eine Funktion übergeben musst, die nur char* oder char** akzeptiert, kannst du type-casten
(char**)myarray // wandelt myarray[][] vorrübergehend in char** myarray um
(char*)myarray[] // wandelt myarray[][] vorrübergehend in char* myarray[] um
du kannst auch einen 2-dim array definieren (zur variablen Belegung mit cstrings) und einen pointer auf ein solches Konstrukt:
char myArray[128][100]; // 128 x char array zu je 100 char Länge
char **ppArr;
dann kannst du auch die Speicheradressen einander zuweisen:
ppArr= (char**)myArray;
und dann ppArr an deine Funktion als Parameter übergeben.
Lesezeichen