【发布时间】:2022-01-03 10:35:38
【问题描述】:
我有一个这样的结构:
struct student {
char name[50];
int grade;
};
我想创建一个结构数组(每个学生一个,使用 malloc)。
struct student *studs=malloc(STUDENT_NUM*sizeof(struct student));
之后,我遍历了包含学生信息的数组,然后尝试将这些信息存储在每个结构中。到目前为止,我遇到了分段错误,但我不明白为什么。
for(int i=0;i<STUDENT_NUM;i++){
strcpy(Names[i],studs[i].name);
studs[i].grade=Grades[i];
}
我找到了另一种可行的方法,但我只是想知道如何使用上面的结构使其工作。
所以“我找到的解决方案实际上是将结构字段更改为:
char *name;
然后在循环中我只是为该数组分配空间,如下所示:
studs[i].name=malloc(50*sizeof(char));
为什么我的第一种方法会给我分段错误。我没有使用该初始化 char name[50]; 分配内存吗?
**还要注意,我只是在学习 C(如果不明显的话)。
提前谢谢你。
【问题讨论】:
-
什么是
Names?请以minimal reproducible example 的形式提供完整代码。但是对于初学者,请注意strcpy的第一个参数是目标,第二个是源。所以strcpy(Names[i],studs[i].name);看起来如果您尝试复制到结构中,它的参数顺序错误。所以这很可能是崩溃的原因,因为它试图从studs[i].name复制,这不是一个有效的字符串。尝试交换参数:strcpy(studs[i].name, Names[i]);
标签: arrays c struct segmentation-fault