Problem mit Zeiger auf struct übergabe an einer Funktion und Rückgabe
-
Moin.
Mein problem ist das ich Test nicht in maib korrekt ausgeben kann.
Kann mir jemand sagen wo der Fehler ist:# include <stdio.h> # include <stdlib.h> # include <malloc.h> # include <string.h> typedef struct{ char Name[30]; int Tore; } mannschaften_t; typedef struct{ int heim; int gast; int plus; int minus; } paarung_t; void eingab(mannschaften_t *teilnehmer){ teilnehmer[0].Tore = 4; teilnehmer[1].Tore = 5; teilnehmer[2].Tore = 6; printf("%i,%i,%i\n", teilnehmer[0].Tore,teilnehmer[1].Tore,teilnehmer[2].Tore); strcpy(teilnehmer[0].Name ,"Tobi"); strcpy(teilnehmer[1].Name ,"Mutti"); strcpy(teilnehmer[2].Name ,"alex"); printf("%s,%s,%s\n",teilnehmer[0].Name,teilnehmer[1].Name,teilnehmer[2].Name); } void eingab2(mannschaften_t **test){ *test = (mannschaften_t*)malloc(3 * sizeof(mannschaften_t)); if(test == NULL) printf("NO"); test[0]->Tore = 1; test[1]->Tore = 2; test[2]->Tore = 3; strcpy(test[0]->Name,"Marco"); strcpy(test[1]->Name,"danni"); strcpy(test[2]->Name,"Tim"); printf("%i,%i,%i\n", test[0]->Tore,test[1]->Tore,test[2]->Tore); printf("%s,%s,%s\n",test[0]->Name,test[1]->Name,test[2]->Name); } int main (void){ mannschaften_t *teilnehmer,*test; paarung_t **spielplan; teilnehmer = (mannschaften_t*)malloc(3 * sizeof(mannschaften_t)); if(teilnehmer == NULL) printf("NO"); teilnehmer[0].Tore = 1; teilnehmer[1].Tore = 2; teilnehmer[2].Tore = 3; strcpy(teilnehmer[0].Name ,"Marco"); strcpy(teilnehmer[1].Name ,"Dani"); strcpy(teilnehmer[2].Name ,"tim"); printf("%i,%i,%i\n", teilnehmer[0].Tore,teilnehmer[1].Tore,teilnehmer[2].Tore); printf("%s,%s,%s\n",teilnehmer[0].Name,teilnehmer[1].Name,teilnehmer[2].Name); eingab(teilnehmer); printf("%i,%i,%i\n", teilnehmer[0].Tore,teilnehmer[1].Tore,teilnehmer[2].Tore); printf("%s,%s,%s\n",teilnehmer[0].Name,teilnehmer[1].Name,teilnehmer[2].Name); printf("****************************************************************\n"); eingab2(&test); printf("%i,%i,%i\n", test[0].Tore,test[1].Tore,test[2].Tore); printf("%s,%s,%s\n",test[0].Name,test[1].Name,test[2].Name); free(teilnehmer); free(test); }
-
in der funktion eingab2() greifst du auf das feld test falsch zu. statt
test[0]->Tore
mußt du
(*test)[0].Tore
schreiben.
c-zeiger sind verzwickt