Array von Strings deklarieren



  • Hallo alle zusammen.

    Ich möcht einen Array deklarieren, wobei jeder Eintrag ein String sein soll. Das ganze möchte ich dynamisch machen, weiß jetzt aber nicht wie ich das definieren soll.

    Denn es müsste ja irgendwie ein Zeiger auf einen Zeiger auf char sein oder?

    Ich komm irgendwie nicht drauf wie ich das deklarieren soll.

    Ich möchte das ganze dann so benutzen dass ich sagen kann.

    strcpy(feld[x], "Text");

    Ist das möglich? Ich hoffe ihr könnt mir helfen.

    Ciao

    André



  • taralos schrieb:

    Denn es müsste ja irgendwie ein Zeiger auf einen Zeiger auf char sein oder?

    z.B. so. Gibt auch andere Möglichkeiten, aber am dynamischsten und praktischsten ist es mit einem *char *foo.

    http://c-faq.com/aryptr/dynmuldimary.html



  • Hallo und danke für deine Hilfe.

    Das hat mir geholfen und es funktioniert jetzt.

    Danke und ciao

    André



  • Hallo nochmal,
    ich dachte ja dass es funktioniert, aber unter Visual Studio bekomme ich immer einen Fehler der mit dem Heap zu tun hat.

    Vielleicht könnt ihr mir zeigen wo ich einen Fehler mache.

    Also ich deklariere mir ein zweidimensionales Feld über Zeiger und will das dynamisch wachsen lassen. Jeder Eintrag soll einen String von 8 Zeichen beinhalten.
    Mit dem Code wollte ich testen ob das stetige realloc auch funktioniert.
    Hier der Code:

    int menge = 0;
    char **array;
    
    array = malloc(sizeof(char*));
    
    while (menge < 6){
      realloc(array, (menge+1)*sizeof(char*));
      array[menge] = malloc (8*sizeof(char));
      menge++;
    }
    

    Und da bekomme ich dann immer einen FEhler im Heap. Was mache ich falsch?

    Danke und ciao

    André



  • Du ignorierst den Rückgabewert von realloc komplett.

    Und dein Konstrukt ist eh nicht sonderlich sinnvoll. Warum orientierst du dich nicht eher am genannten Beispiel?



  • Auf was muss ich da beim Rückgabewert achten?

    Ich hab ja versucht mich am Beispiel zu orientieren, aber irgendwie bekomm ich es nicht hin.

    Ich weiß auch nicht genau was ich mit dem realloc falsch mache.

    Kannst du mir da noch nen Hinweis geben?

    Edit: Kann es sein, dass mein Fehler war, dass ich den Rückgabewert von realloc nicht auf array gespeicher habe? Also z.b.
    array = realloc(array, sizeof(array)+sizeof(char*));



  • Gegenfrage: Benutzt das Beispiel realloc()?

    Zudem solltest du anfangen die manpages der C-Funktionen zu lesen. Da steht auch drin wie realloc arbeitet.



  • taralos schrieb:

    Edit: Kann es sein, dass mein Fehler war, dass ich den Rückgabewert von realloc nicht auf array gespeicher habe? Also z.b.
    array = realloc(array, sizeof(array)+sizeof(char*));

    Ja, so in etwa muss realloc benutzt werden. Aber das brauchst du hierfür nicht.

    Und nochwas: Schau mal nach ob sizeof(array) auch wirklich das zurückgibt was du annimmst.



  • Ich wusste nicht dass man den Speicher im nachhinein auch noch ohne realloc vergrößern kann, ich werde mir mal die hilfeseiten dazu anschauen.
    Ich schau da noch nicht so recht durch.

    Ich dachte halt, dass ich wenn ich einen neuen Eintrag dazuhaben möchte, mit realloc den Speicher vergrößern muss.


Anmelden zum Antworten