char** Probleme
-
Hallo zusammen,
ich habe eine Methode die eine Liste von Wörtern zurückgeben soll. Diese Liste von Wörtern ist mir bereits vor dem Compilieren bekannt.
Also die Wörterliste ist: Hund, Katze, Maus.
Nun habe ich eine Methode die diese Liste zurückgeben soll. Nun hab ich mir gedacht ich mach es so:
char** LeseTiere(unsigned int &iSize) { char** pNamen; pNamen[0] = "Hund"; pNamen[1] = "Katze"; pNamen[2] = "Maus"; out_iSize = 3; return pNamen; }Ich sehe schon das da ein Fehler ist, denn es wird nirgendwo der Speicher für die drei char-Zeiger festegelegt (bzw. vorgegeben das es drei sind). Wie mache ich das? Ich kann doch keinen Speicher allozieren, denn wann soll ich diesen freigeben...
Danke für eure Hilfe,
ein verzweifelter Noob--
-
Eine einfache Lösung wäre dieses:
char* LeseTiere(unsigned int iIndex) { static char *pNamen[] = {"Hund", "Katze", "Maus"}; int iArrayLength=sizeof(pNamen)/sizeof(char *); if (iIndex >= iArrayLength) { return 0; // Fehler } else { return pNamen[iIndex]; } }Durch das static ist der Speicher auch ausserhalb gültig. Allerdings constant. -> Kopie machen.
-
wie wär's mit mehrdimensionalen array?
char** getList(int& listLength){ char* tiere[3]={"T-Rex", "mammut", "Godzilla"}; listLength=3; return tiere; }sollte iegentlich klappen... oder?
edit: static ist in diesem fall nicht erforderlich, ändert sich ja nichts... (die funktion an sich wird im speicher nicht herumgeschoben--> der zeiger kann bedenkenlos zurückgegeben werden)
-
Ach so, er wollte die gesamte Liste zurück haben...
-
@Andrey:
Das Array muss trotzdem static sein, damit es auch ausserhalb der Funktion gültig ist
-
@ Mokka:
char**ja
@ LordJaxom: hm hm hm... wieso das? muss ich ma ausprobieren, sekunde^^
also, dass es mit einzelnen konstanten char-arrays geht, da bin ich mir 100% sicher...
-
Mokka schrieb:
Durch das static ist der Speicher auch ausserhalb gültig. Allerdings constant. -> Kopie machen.
Das Array steht ja im Heap. Ist doch nicht konstant...
-
@LordJaxom sry, hatte grad nen kleinen denkfehler gehabt, stimmt: so darf man's nicht machen.
*schäm*