如何使用函数访问结构中的结构指针?
How to access a pointer of struct in a struct using a function?
其实我不知道该怎么办,只能要求解释一些我不知道该叫什么的事情。我想修改“Train *t”中的“Date *d”。
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;
我得到了这个修改火车变量的函数。
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
其实我不知道该怎么办,只能要求解释一些我不知道该叫什么的事情。我想修改“Train *t”中的“Date *d”。
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;
我得到了这个修改火车变量的函数。
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