我正在学习structs
,我仍然对他们及其所做的事情感到困惑。我的代码是我的尝试,我不断得到分段错误。我的主要目标是让用户在调用函数时查看他们想要添加的学生数量以及名称和分数的每个信息。我还想将数据阵列打印给用户。
对于loadStudentData()
函数,我想将newName
和NewScore
存储到newStudent
结构中。
对于printStudentData()
我想为单个学生打印数据
然后对于printStudentArray()
,我想在学生数组的每个成员上调用printStudentData()
函数。
我的代码是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define STUDENT_NAME_LENGTH 20
typedef struct{
char* name;
int score;
}Student;
void loadStudentData(Student *newStudent,char* newName,int newScore);
int printStudentData(Student student);
void printStudentArray(Student* students, int numStudents);
/*
*
*/
int main(int argc, char** argv) {
int numberOfStudents;
Student *newStudent;
char* newName;
int newScore;
int student;
Student students[numberOfStudents];
printf("how many students: ");
scanf("%d", &numberOfStudents);
loadStudentData(newStudent, newName, newScore);
printStudentArray(students, numberOfStudents);
return (EXIT_SUCCESS);
}
void loadStudentData( Student *newStudent, char* newName, int newScore){
int i;
char *studentName = (char *) malloc(STUDENT_NAME_LENGTH * sizeof(char));
scanf("%s", studentName);
newStudent->name = studentName;
int nScore;
scanf("%d", &nScore);
newStudent[i].score = newScore;
}
int printStudentData(Student student){
int i;
printf("Student name\t%s\n",) ;
printf("Student score\t%d\n",);
}
void printStudentArray(Student* students, int numStudents){
int i;
for (i = 0; i < numStudents; i++) {
printf("Student name\t%s\n", students[i].name);
printf("Student score\t%d\n", students[i].score);
}
}
答案 0 :(得分:0)
第1点 DirectionsRenderer
无效,因为Student students[numberOfStudents];
未初始化。
第2点:在您的代码中,您在填充numberOfStudents
之前正在调用printStudentArray()
。
此函数尝试访问导致undefined behaviour的student
变量的未初始化内存。
第3点:在name
功能中,您使用loadStudentData()
未初始化。再次UB。
那就是说,
i
是否成功。malloc()
malloc()
和C
家人的回复价值do not cast。答案 1 :(得分:0)
在实际初始化结构数组之前调用printStudentArray
。这意味着数组中的所有数据都将不确定并以任何方式使用它,除了初始化它将导致未定义的行为(这是崩溃的常见原因)。
更具体地说,问题可能是当您尝试打印名称时,因为name
指针可以将指向。
答案 2 :(得分:0)
您似乎没有分配您正在创建的结构。请注意,当您声明Student *newStudent;
之类的变量时,首先必须分配。因为到目前为止,您只声明了一个将指针保存到Student
结构的变量,但是这个指针指向无处。因此,在期望有效指针的任何地方使用malloc函数:
newStudent = malloc(sizeof(newStudent));