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

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