in Struktur schreiben funktioniert nicht



  • Guten Tag die Herrschaften,

    folgender Quelltext bringt beim compilieren leider fehler

    struct player {
          char Spielername[10];
    }*Spieler;
    
    int main(void) {
    
          Spielername = (struct player *)malloc(sizeof(struct player *));
          Spieler->Spielername[] = "Testname";      // funktioniert nicht
    }
    

    wo liegt da der Fehler bzw. wie kann ich einen Default-Namen festlegen.
    vielen Dank schonmal .

    Gruß Tridane



  • strcpy()



  • struct player {
          char Spielername[10];
    }*Spieler;
    
    int main(void) {
    
          Spielername = (struct player *)malloc(sizeof(struct player *));
          strcpy(Spieler->Spielername[], "Testname");     // funktioniert nicht
    }
    

    hab ich auch vorher schon versucht...funktioniert ebenfalls nicht



  • Lass die eckigen Klammern weg.

    Und für die Zukunft: Siehe Signatur 😉



  • ...und den cast vor 'malloc' auch

    Spieler = malloc(sizeof(struct player));
    strcpy(Spieler->Spielername, "Testname");
    

    🙂



  • ok vielen Dank 🙂
    meine Frage wäre noch, warum der cast vor "malloc" weg soll/muss?
    hab das bis jetzt immer so gemacht



    1. Der Cast ist unnötig. malloc gibt einen void* zurück, der in alle anderen Zeiger implizit konvertiert werden kann.

    2. Solltest Du vergessen, malloc korrekt zu deklarieren (zB. durch einbinden von <stdlib.h> ), so nimmt Dein Compiler malloc als eine externe Funktion an, die einen int zurückgibt. Diesen Integer biegt nun Dein cast in einen wasauchimmer-Pointer um. Das geht nur gut, wenn ein Pointer und ein Integer auf Deinem System gleich breit sind.

    3. "Thou shall not cast the result of malloc!"

    greetz, Swordfish

    PS: Die dritte Begründung ist wohl die eingängigste 😉



  • tridane schrieb:

    meine Frage wäre noch, warum der cast vor "malloc" weg soll/muss?

    erstens ist er überflüssig und zweitens nimmst du damit dem compiler die möglichkeit, gewisse fehler zu erkennen.

    char a = malloc(256);       // fehlermeldung: 'a ist kein pointer'
    char b = (char)malloc(256); // keine fehlermeldung, aber sicher nicht so gewollt
    

    🙂



  • alles klar, habs verstanden...vielen Dank 🙂


Anmelden zum Antworten