2017-01-27 3 views
-1

Ich muss Name in eine Variable (Vorname *) in einer Struktur eingeben mit einem malloc ich verstehe nicht, warum zu programmieren ist fehlgeschlagen zu laufen. im Namen (zum Beispiel David) Einsetzen und das sollte bekommt den Namen und legen Sie sie in temporärer Array und dann den Zeiger first_name * , um die Größe und die Zeichenfolge Temp kopieren * first_nameverschachtelte Strukturen - Eingabe

jemand kann mir helfen, zu verstehen warum es nicht funktioniert?

suchen Sie nach der Funktion "ReadPerson".

typedef struct{ 
    int day, month, year; 
} Date; 

typedef struct{ 
    char *first_name, *last_name; 
    int id; 
    Date birthday; 
} Person; 

void ReadDate(Date *a) 
{ 
    printf("insert day, month, year\n"); 
    scanf("%d%d%d", &a->day, &a->month,&a->year); 
} 

void ReadPerson(Person *b) 
{ 
    char temp_first_name[21]; 
    char temp_last_name[21]; 

    printf("insert first name:\n"); 
    gets(temp_first_name); 
    b->first_name = (char*)malloc(strlen(temp_first_name)+1); 
    strcpy(b->first_name,temp_first_name); 
    //need to check malloc (later) 

    printf("insert last name:\n"); 
    gets(temp_last_name); 
    b->last_name = (char*)malloc(strlen(temp_last_name)+1); 
    strcpy(b->last_name, temp_last_name); 
    //need to check malloc (later) 

    printf("insert id\n"); 
    scanf("%d",&b->id); 

    printf("insert person's birthday:\n"); 
    ReadDate(b); 
} 

Danke.

+1

Kompiliert es überhaupt? Hier: 'ReadDate (b);' übergeben Sie 'b' vom Typ' Person * 'an eine Funktion, die' Date * 'erwartet. –

+0

Überprüfen Sie [hier] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc), um herauszufinden, warum Sie den Rückgabewert von 'malloc()' nicht umsetzen sollten. – naccyde

Antwort

1

Ich verstehe nicht, warum die Programmierung nicht

gut laufen, ist es, weil Sie inkompatible Typen und anständige Compiler zu ersetzen sind versucht haben, sollten Sie davon erzählt.

die am Ende der Funktion Werfen wir einen Blick void ReadPerson(Person *b):

{ 
    ... 
    ReadDate(b);   // error here 
} 

Wie Sie sehen können b vom Typ Person * und Sie geben es an die Funktion void ReadDate(Date *a), die eine Date * Art erwartet.

So ist es wahrscheinlich ein einfacher Tippfehler, ändern Sie einfach zu diesem: ReadDate(&b->birthday);.

+0

danke dir über die Hilfe .. –

Verwandte Themen