如何使用函数访问结构中的结构指针?



其实我不知道该怎么做,除了要求解释一些我不知道该叫什么的东西。我想修改日期*d">

<;Train *t&>
typedef struct date{
char dateDepart[MAX_VAL];
int mois;
int jour;
int annee;
}Date;
typedef struct train{
int numero;
char villeDepart[MAX_VAL];
char villeArrivee[MAX_VAL];
Date *d;
}Train;

我得到了这个修改Train变量的函数

void getTrain(Train *t){
printf("Saisie Train: ");
scanf("%d",&t->numero);
printf("Ville Depart: ");
scanf("%s",&t->villeDepart);
printf("Ville Arrivee: ");
scanf("%s",&t->villeArrivee);
printf("=========== Date Depart ============n");
getDate(t->d);
printf("====================================n");
}

当涉及到getDate时,它不起作用,可执行程序退出。我猜是分割错误。老实说,我不是专家。但如果有人帮我解决getTrain的问题,我会非常高兴。我猜是指针有问题。我不知道。

这是getDate函数

void getDate(Date *d){
printf("Jour: ");
scanf("%d",&d->jour);
printf("Mois: ");
scanf("%d",&d->mois);
printf("Annee: ");
scanf("%d",&d->annee);
char tmp [MAX_VAL]; itoa(d->jour,tmp,10);
strcat(d->dateDepart,tmp);
strcat(d->dateDepart,"/");
itoa(d->mois,tmp,10);
strcat(d->dateDepart,tmp);
strcat(d->dateDepart,"/");
itoa(d->annee,tmp,10);
strcat(d->dateDepart,tmp);
}

,这是主代码。

int main(){
Train *t;
getTrain(t);
putTrain(t);
}

putTrain只是用于打印。

您正在尝试访问未初始化的指针。如果您使用指针,则需要正确地为这些指针分配地址,并且在您的情况下,需要动态分配内存块:

Train *t = (Train*)malloc(sizeof(Train));
t->d = (Date*)malloc(sizeof(Date));
// do something...
free(t->d);
free(t);
t = NULL;

请注意,您不必强制使用动态分配的内存,例如,您可以如下声明您的Train结构:

typedef struct train{
int numero;
char villeDepart[MAX_VAL];
char villeArrivee[MAX_VAL];
Date d;                     //< not a pointer
} Train;

然后按如下方式使用你的结构:

int main(){
Train t;
getTrain(&t);  //< reference (pointer) to t
putTrain(&t);  //< reference (pointer) to t
}

在这种情况下,您还必须修改访问d的方式以传递给getDate函数:

getDate(&t->d); //< reference (pointer) to d member of t

最新更新