2016-05-13 16 views
1

私はCの初心者です。私にはこのエラーを修正する方法を教えてください。cポインタエラー、現在時刻を取得

#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]); 
} 

エラーがある:互換性のないポインタ型からの復帰。

PS:私は

はあなたに感謝のgetDate同じエラーのリターンに復帰&タブを試してみました。

+0

Amar、あなたは[tag:C++]を使用していると思われますが、これは100%確かに[tag:c]コードですか?この 'struct node {int * date = getDate();};'が無効で 'struct node n1 =(struct node *)malloc()'もまた割り当ての左側が異なる'malloc()'をタイプします。 –

+0

'node-> date'は' n1-> date'でなければなりません – BackDoorNoBaby

+0

'node'のコンストラクタを呼び出すことは決してないので、' date'フィールドは決して設定されません。 – BackDoorNoBaby

答えて

2

getDateスタックの最上部にタブ[3]を割り当てます。 getDateが返された後、この変数にアクセスできなくなりました。

戻ってgetDateスタックが破棄され、タブ[3]がgetDateスコープの有効期間を持ち、同じ方法で破棄されるためです。

タブ[3]を静的にすると、タブ[3]はプログラムの有効期間になります。

#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]); 

} 

(Cにおいては、構造体ノードはコンストラクタではなく、単にデータ構造):

これを試してみてください。

+0

盗むことができません –

+0

あなたの答えを編集し、' struct node n1'を 'struct node * n1'に変更し、 'malloc'コールの後に' main() 'の' node 'から 'n1'へ' – BackDoorNoBaby

+0

あなたは正しいです、私はあまりにも速くコピーをしました。 –

関連する問題