Frage zu Array mit Zeichenketten
-
Hi Leute
,ich hab hier mal ne etwas allgemeinere Frage zu nem Array aus Zeichenkettenketten.
Ich habe eine Fünktion geschrieben die mir schlicht und einfach nur ein Array aus Zeichenketten zurückgibt **arrayBack().
Der PointerPointer char **myArr dient zur Aufnahme des Rückgabewertes.
Über den Arrayzugriffsoperator kann ich auf jede beliebige Zeichenkette des Arrays zugreifen, aber nur auf eine, möchte ich auf eine zweite oder dritte Zeichenkette zugreifen muss ich immer wieder die Fuktion bzw. ihren Rüchgabewert erneut zuqweisen. Das kann doch nicht sein, über eine Schleife muss es doch dann möglichsein alle Zeichenketten nacheinander auszulesen, sonst müsste ich bei einem Array mit z.b.: 100 Zeichenketten 100 mal zuweisen.
Aber was mach ich falsch und wie geht’s richtig?
Hier der Source:
# include <iostream> using namespace std; char **arrayBack(); // Prototype für ein char - Array als Return Wert void main() { char **myArr = NULL;; // Deklaration eines Pointers auf ein Array aus Zeichenketten myArr = arrayBack(); // Dem Pointer wird der Returnwert der Funktion arrayBack (ein Array aus Zeichenketten) zugewiesen cout << myArr[2] << endl; // Ausgabe des Pointers an Stelle 2 cout << arrayBack()[3] << endl; // funktioniert aber warum funktioniert das und die Zeile darunter nicht cout << myArr[4] << endl; // Ausgabe des Pointers an Stelle 4 funktioniert nicht myArr = arrayBack(); // Jetzt nach erneuter Zuweisung geht's wieder cout << myArr[4] << endl; } char **arrayBack() { char *myArr[]= {"Alpha","Beta","Gamma","Delta","Epsilon"}; // Deklaration und initialisierung des Arrays aus Zeichenketten return myArr; // Rückgabe des Arrays }Vielen Dank schon mal vorab für eure Hilfe

ShadowEater
-
Hallo
Zuerst mal : "Funktioniert nicht" ist keine ausreichende Fehlerbeschreibung!
Das Grundproblem in deinem Code ist, das du einen Pointer auf eine lokale Variable, in deinem Fall ein Array von String-Literalen ist. Das erzeugt auf jedenfall undefiniertes Verhalten, denn nach dem Ende der Funktion gibt es die Variable nicht mehr, und jeder Pointer darauf ist ungültig.
Warum erstellst du nicht ein statisches konstantes Array?
static const char * const myArr[]= {"Alpha","Beta","Gamma","Delta","Epsilon"};Das kannst du nun in eine Header-Datei packen und überall dort wo du es brauchst includen. Die extra Funktion brauchst du nicht.
bis bald
akari
-
D*A*N*K*E akari
,ich hab tatsächlich übersehen
dass ich das Array in der Funktion nicht static gemacht hab
.ShadowEater