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.


Log in to reply