簡體   English   中英

如何將 memory 分配給結構數組中的 typedef 結構

[英]How to allocate memory to a typedef struct within array of structs

我一直在嘗試將 memory 分配給指針變量,但它一直給我錯誤或分段錯誤。 如何正確初始化指向課程結構的指針變量?

 typedef struct {
    char courseId[7];
    char courseName[10];
    } Course;

    struct Student{
    char firstName[10];
    char lastName[10];
    int studentId;
     Course *course;
    };

int main() {
  int numStudents;
  printf("How many students do you wish to register?: ");
  scanf("%d", &numStudents);
  struct Student *student[numStudents];
  student[numStudents] = malloc(sizeof(*student[numStudents]));
  student[numStudents]->course = malloc(sizeof*(numStudents * Course));
  for (int i = 0; i < numStudents; i++) {
    printf("Enter student #%d First Name: ", i+1);
    scanf("%s", student[i]->firstName);
    printf("Enter student Last Name: ");
    scanf("%s", student[i]->lastName);
    printf("Enter Student ID: ");
    scanf("%d", &student[i]->studentId);
    printf("Enter Course ID: ");
    //student[i]->course = malloc(sizeof(*(student[i]->course)));
    scanf("%s", student[i]->course->courseId);
    printf("Enter Cousrse Name: ");
    //student[i]->course = malloc(sizeof(*(student[i]->course)));
    scanf("%s", student[i]->course->courseName);
  }

  for (int i = 0; i < numStudents; i++) {
    printf("Student Name: %s %s\n", student[i]->firstName, student[i]->lastName);
    printf("Student ID: %d\n", student[i]->studentId);
    printf("Course Code: %s\n", student[i]->course->courseId );
    printf("Course name: %s\n", student[i]->course->courseName);
    free(student[i]->course);
  }

你幾乎擁有它,需要進行一些更正。 Student 中的課程 object 不需要是指針。 Student 結構的數組需要動態分配,然后再釋放。 ->用作取消引用運算符,但在您的情況下[]已經取消引用,因此您將使用. 而不是->並且當您為結構數組分配 memory 時,它需要是結構的大小乘以結構的數量。 malloc(sizeof(struct Student)*numStudents);

typedef struct {
    char courseId[7];
    char courseName[10];
} Course;

struct Student{
    char firstName[10];
    char lastName[10];
    int studentId;
    Course course;
};

int main() {
    int numStudents;
    printf("How many students do you wish to register?: ");
    scanf("%d", &numStudents);
    struct Student* students = malloc(sizeof(struct Student)*numStudents);
    for (int i = 0; i < numStudents; i++) {
        printf("Enter student #%d First Name: ", i+1);
        scanf("%s", students[i].firstName);
        printf("Enter student Last Name: ");
        scanf("%s", students[i].lastName);
        printf("Enter Student ID: ");
        scanf("%d", &students[i].studentId);
        printf("Enter Course ID: ");
        scanf("%s", students[i].course.courseId);
        printf("Enter Cousrse Name: ");
        scanf("%s", students[i].course.courseName);
    }

    for (int i = 0; i < numStudents; i++) {
        printf("Student Name: %s %s\n", students[i].firstName, students[i].lastName);
        printf("Student ID: %d\n", students[i].studentId);
        printf("Course Code: %s\n", students[i].course.courseId );
        printf("Course name: %s\n", students[i].course.courseName);
    }
    free(students);
    return 0;
}

我試圖對您的代碼進行最小的更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM