【问题标题】:How to store value in an array of a struct in C如何将值存储在C中的结构数组中
【发布时间】: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


【解决方案1】:

所以我只是按照kaylum 的评论运行我的代码。错误不是我要找的地方。忽略 strcpy() 函数并以错误的顺序给出参数只是我的错。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2010-11-10
  • 2019-06-19
  • 1970-01-01
  • 2019-12-22
相关资源
最近更新 更多