2016-05-13 13 views
1

Ich bin ein Anfänger in C, können Sie mir bitte erklären, wie Sie diesen Fehler beheben.c Zeiger Fehler, aktuelle Zeit

#include <Windows.h> 
#include <stdio.h> 

int *getDate() 
{ 
    SYSTEMTIME str_t; 
    GetSystemTime(&str_t); 

    int tab[3]; 
    tab[0]=str_t.wDay; 
    tab[1]=str_t.wMonth; 
    tab[2]=str_t.wYear; 

    return tab; 
} 

struct node 
{ 
    int *date= getDate(); 
}; 

void main() 
{ 
    struct node n1 = (struct node*)malloc(sizeof(struct node)); 

    int *tab = n1->date; 
    printf("Jour : %d , Mois : %d , Anne : %d",tab[0],tab[1],tab[2]); 
} 

Fehler ist: Rückkehr aus inkompatiblen Zeigertyp.

ps: Ich habe versucht, & Registerkarte im Gegenzug von getDate gleichen Fehler

Sie zurückkommen danken.

+0

Amar, ich vermute, Sie verwenden [tag: C++], ist das 100% sicher [tag: c] code? Da dieser 'struct Knoten {int * Datum = getDate();};' ungültig ist und 'struct Knoten n1 = (struct Knoten *) malloc()' auch ist, beachte auch, dass die linke Seite der Zuweisung eine andere hat Tippe den 'malloc()' ein. –

+0

auch 'node-> date' sollte' n1-> date' sein – BackDoorNoBaby

+0

Außerdem rufen Sie niemals den Konstruktor für 'node' auf, so dass Ihr' date' Feld niemals gesetzt wird – BackDoorNoBaby

Antwort

2

getDate Registerkarte [3] oben im Stapel zuweisen, Und diese Variable ist nicht mehr erreichbar, nachdem getDate zurückkehrt.

Seit getDate Stack wird durch die Rückkehr zerstört und Tab [3] hat die Lebensdauer von getDate Umfang und wird auf die gleiche Weise zerstört.

Wenn Sie Tab [3] statisch machen, hat Tab [3] die Lebensdauer Ihres Programms.

Probieren Sie dies aus:

#include <Windows.h> 
#include <stdio.h> 

int *getDate() 
{ 
    SYSTEMTIME str_t; 
    static int tab[3]; 

    GetSystemTime(&str_t); 

    tab[0] = str_t.wDay; 
    tab[1] = str_t.wMonth; 
    tab[2] = str_t.wYear; 

    return tab; 
} 

struct node{ 
    int *date; 
}; 

void main() 
{ 
    struct node* n1 = (struct node*) malloc(sizeof(struct node)); 
    int *tab; 
    n1->date = getDate(); 

    tab = n1->date; 
    printf("Jour : %d , Mois : %d , Anne : %d",tab[0],tab[1],tab[2]); 

} 

(In C struct Knoten kein Konstruktor ist, sondern nur eine Datenstruktur).

+0

stehlen nicht funktionieren –

+0

Ich habe Ihre Antwort bearbeitet,' struct node n1' in 'struct node * n1' ändern und' ändern node 'nach' n1' in 'main()' nach dem 'malloc' Aufruf – BackDoorNoBaby

+0

Sie haben Recht, ich habe zu schnell kopiert. –