我正在处理结构,并且我需要在char数组中分配一个字符串。以下是我的代码中的一些具体部分:
typedef struct{
int std_id;
char std_name[STD_NAME_SIZE];
double gpa;
char courses[COURSE_SIZE];
}student_t;
typedef struct{
int course_id;
char course_name[COURSE_NAME_SIZE];
char course_code[COURSE_CODE_SIZE];
char course_acronym[COURSE_ACRONYM_SIZE];
int quota;
}course_t;
这是我使用的结构。这是分配部分:
for(int i = 0; i < COURSE_SIZE; i++){
printf("Enter course name: ");
scanf("%s", &courseDetails.course_name);
studentProfile.courses[i] = courseDetails.course_name;
}
for(int j = 0; j < COURSE_SIZE; j++){
printf("\nYour %d course is: %s", j + 1, studentProfile.courses[j]);
}
我认为问题出现在studentProfile.courses[i] = courseDetails.course_name
部件上。我应该使用指针吗?我该如何解决这个问题?
发布于 2019-03-15 03:51:00
据推测,COURSE_SIZE被定义为学生可以选修的最大课程数量。然后在student_t结构中,courses
将被声明为char courses[COURSE_SIZE][COURSE_NAME_SIZE]
,并被设置为strcpy(studentProfile.courses[i], courseDetails.course_name);
,但这仍然不是正确的方法。您真正想要的是courses
数组是一个包含多个过程的数组:
course_t *courses[COURSE_SIZE];
并将coursesi设置为指向某个课程j:
studentProfile.courses[i] = &courseDetails[j];
然后,如果你想引用该学生所选的第i门课程的名称,你可以使用courses[i]->course_name
。
请注意,在声明course_t结构之前,必须先声明student_t结构。
发布于 2019-03-15 03:37:15
由于您使用的是not using指针,因此您应该使用如下内容
strcpy(studentProfile.courses[i], courseDetails.course_name);
编辑:正如评论指出的那样,这显然是错误的。
也许您只是忘记了对另一个变量的数组访问,如
courseDetails.course_name[i]
https://stackoverflow.com/questions/55170512
复制相似问题