c指针错误,获取当前时间

时间:2016-05-13 13:55:16

标签: c pointers time

我是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:我尝试使用return&amp; tab来回复getDate相同的错误

谢谢。

1 个答案:

答案 0 :(得分:2)

getDate在堆栈顶部分配标签[3], 在getDate返回后,此变量不再可用。

由于getDate堆栈是通过返回来销毁的,因此tab [3]具有getDate范围的生命周期并且以相同的方式被破坏。

如果你将tab [3]设为静态,tab [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中,struct node不是构造函数,只是数据结构)。