1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

[C] struct, liste, dynamische Speicherverwaltung

    • Frage
  • Becherer
  • 30. März 2004 um 14:09
  • Unerledigt
  • Becherer
    9
    Becherer
    Mitglied
    Reaktionen
    1
    Punkte
    711
    Beiträge
    121
    • 30. März 2004 um 14:09
    • #1

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

    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.


  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 30. März 2004 um 14:15
    • #2

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

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

  • Becherer
    9
    Becherer
    Mitglied
    Reaktionen
    1
    Punkte
    711
    Beiträge
    121
    • 30. März 2004 um 14:23
    • #3
    Zitat von jeuneS2

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


    Stimmt! Jetzt funktionierts.
    hatte solange mit sizeof und strlen rumgespielt, dass ich was durcheinander gebracht habe.
    Ich Depp!

    Danke!


  • marX
    7
    marX
    Mitglied
    Reaktionen
    10
    Punkte
    460
    Beiträge
    88
    • 30. März 2004 um 21:31
    • #4

    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

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung