Innerhalb einer Struktur Platz für Zeichenkette zuweisen



  • Hallo Community,

    typedef struct
    {
    int alter;
    char *name;
    } NL;
    NL NL1[100];

    In dieser einfachen Struktur ist Platz für 100 Altersangaben und Zeiger auf Namen. Gehe ich Recht in der Annahme, dass wenn ich jetzt Platz für z.B. den 80. Namen, etwa "Lischen Müller" brauche, den so allokieren ..

    NL[80].name = (char ) malloc((size_t) (sizeof(char)(strlen("Lischen Müller")+1));

    .. und so ..

    strcpy(NL[80].name,"Lischen Müller");

    .. zuweisen kann? Der Compiler schluckt das, aber es funktioniert nicht. Wo ist denn da mein Denkfehler?

    Vielen Dank
    Keltas



  • keltas schrieb:

    .. zuweisen kann? Der Compiler schluckt das, aber es funktioniert nicht. Wo ist denn da mein Denkfehler?

    Das Du entweder im falschen Forum (C++ statt C) postest, oder schlechtes Lehrmaterial benutzt.



  • Du machst da C, kein C++.
    Sicher, dass du im richtigen Unterforum bist?

    gruß
    syntax



  • keltas schrieb:

    NL[80].name = (char *) malloc((size_t) (sizeof(char)*(strlen("Lischen Müller")+1));
    

    Bei der Cast-Orgie compiliert er zumindest als C++.

    keltas schrieb:

    Der Compiler schluckt das, aber es funktioniert nicht. Wo ist denn da mein Denkfehler?

    Woher weißt du denn, dass das nicht funktioniert?
    Schon mal die Ausgabefunktion überprüft oder den Debugger benutzt?



  • Syntax_error<
    Sorry für das falsche Forum - nicht aufgepasst (bitter).

    DirkB<
    'Cast Orgie' stimmt schon, die Casts kann man weglassen. Woher ich weiss, dass das nicht funktioniert? Ich benutze einen Debugger und an der Adresse steht nichts und ich kann den String auch keinem Vergleich unterziehen. Aus der Antwort entnehme ich aber, dass Du das Codefragment in sich für richtig hälst; das ist ja schon mal was. Vielen Dank für diesen Hinweis.

    Möglicherweise habe ich mein Codebeispiel zu sehr eingedampft und der Fehler liegt ganz woanders, das werde ich noch mal durchgehen - und b.t.w. das Forum wechseln. Also schließen wir das hier.

    Vielen Dank für die Befassung
    Keltas



  • Das du NL1[] definierst und NL[] nutzt ist wohl ein Schreibfehler.
    ( NL NL1[100]; <-> NL[80].name )



  • DirkB <
    richtig! das war ein Schreibfehler. Bei dem Bemühen, die ganze Kiste im richtigen Forum zu posten ist mir dann der Fehler aufgefallen. Für's Allokieren brauche ich die Länge des Strings. Ich hab 'strlen(name+1);' statt 'strlen(name)+1;'
    geschrieben. Echt blind !!! Shit happens.
    Danke nochmals
    Keltas


Anmelden zum Antworten