[C] struct, liste, dynamische Speicherverwaltung

  • Bin leider ein Anfänger in c und habe somit ein paar Schwierigkeiten mit pointer. :D

    Angenommen ich habe eine lineare Liste, wo ich Strings unterschiedlicher Länge abspeichern will:

    meine jetzige Idee

    Code
    struct liste {
        		   char sInput[MAX];
        			liste *next;
        }



    kann ich es auch so lösen :

    Code
    struct liste {
         		   char *szInput;
         			liste *next;
         }



    Wenn ich einen zeiger auf den Anfang der Liste habe und einen String (geliefert über argv[] und char *szTemp zeigt drauf ) bekomme, wie kann ich szTemp auf szInput speichern.
    Ich nutze strncpy/strcpy. Zuvor muss ich aber für szInput Speicher reservieren. Wie mach ich das?
    Leider funktioniert das so, wie ich es mache nicht :

    Code
    anfang->szInput=(char *) malloc (strlen(*szTemp) + 1);
        strcpy(anfang->szInput,szTemp);



    Was mach ich falsch?

    Danke.


  • Zitat von jeuneS2

    Es sollte wohl strlen(szTemp) statt strlen(*szTemp) heißen.


    Stimmt! Jetzt funktionierts.[Blockierte Grafik: http://hades.gothic.at/iforum/images/smilies/biggrin.gif]
    hatte solange mit sizeof und strlen rumgespielt, dass ich was durcheinander gebracht habe.
    Ich Depp! [Blockierte Grafik: http://hades.gothic.at/iforum/images/smilies/shinner.gif]

    Danke![Blockierte Grafik: http://hades.gothic.at/iforum/images/smilies/thumb.gif]


  • jo .. aber du musst ja den string eigentlich gar nicht kopieren -> zeiger würde auch reichen!

    anfang->szInput = szTemp;

    -> ist natürlich gefährlich, wenn der string nur temporär (zb. in einer fkt.) am stack steht und später wieder überschriben wird...aber das kann dir bei argv ja nicht passieren !

    mfg marX

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!