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
-
-
Der Cast ist unnötig.
malloc
gibt einenvoid*
zurück, der in alle anderen Zeiger implizit konvertiert werden kann. -
Solltest Du vergessen,
malloc
korrekt zu deklarieren (zB. durch einbinden von<stdlib.h>
), so nimmt Dein Compilermalloc
als eine externe Funktion an, die einenint
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. -
"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