我是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相同的错误
谢谢。答案 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不是构造函数,只是数据结构)。