dynamisches Feld/Array
-
/* Variable für Ergebnis */ char ergebnis[UNBEKANNT][3];
wie erstelle ich ein 100% dynamisches Feld? Ich weiß nicht, wie viele Elemente der Array enthält, mal 3, mal 100,...
Ich will eigentlich sowas speichern:
ergebnis[0][1] = "irgend";
ergebnis[0][2] = "anderes";
ergebnis[0][3] = "was";
.
.
.
ergebnis[151][1] = "irgend1";
ergebnis[151][2] = "anderes1";
ergebnis[151][3] = "was1";Auch wenn ich das "fest" machen würde, wäre es ja falsch deklariert (wegen char-feldern)?! oder?
Bei dyn. nochmal ne Erweiterung mit
realloc? malloc? nur wie?Gruß
Dominik
-
Du brauchst erstmal einen Zeiger auf ein Array von char-Zeigern:
char **ergebnis = NULL;
Wenn Du dann weißt, wie viele Zeichenketten Du speichern willst, musst Du Speicher für die Zeiger darauf allokieren:
ergebnis = malloc(anzahl_strings*sizeof(char *)); if(ergebnis) for(i=0;i<anzahl_strings;++i) ergebnis[i] = NULL;
Für jede Zeichenkette musst Du dann erneut individuell Speicher anfordern:
ergebnis[dieser_string] = malloc(laenge_der_kette*sizeof(char)); if(ergebnis[dieser_string]) strcpy(ergebnis[dieser_string],gelesene_kette);
Wenn Du den Kram nicht mehr brauchst, natürlich alles brav wieder freigeben...
-
@Miq
Auf Einrückung fährst du nicht so ab, oder?
-
GPC schrieb:
@Miq
Auf Einrückung fährst du nicht so ab, oder?Doch, im Prinzip schon - ich bin Anhänger der 3-Blanks-je-Level-Einrückungsgemeinde, TABs "should be avoided like the plague"
. Ich wollte aber keinen codereviewfähigen Code abliefern, sondern nur eine Idee skizzieren.
Es fehlen ja auch die Codestücke zum Abfangen von malloc-Fehlern etc.