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 😉


Anmelden zum Antworten