實際上,我不知道該做什么,除了要求對我不知道該怎么稱呼的事情進行解釋。我想修改“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;
我得到了這個修改 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 僅用于列印。
uj5u.com熱心網友回復:
您正在嘗試訪問未初始化的指標。如果您使用指標,則需要為這些指標正確分配地址,并且在您的情況下,動態分配記憶體塊:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/485106.html
標籤:C
上一篇:如果有效,以下omp如何并行?
