其实我不知道该怎么做,除了要求解释一些我不知道该叫什么的东西。我想修改日期*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