我正在学习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);
}
}发布于 2015-06-17 05:38:12
发布于 2015-06-17 05:38:23
在实际初始化结构数组之前调用printStudentArray。这意味着数组中的所有数据都将是不确定的,并以任何方式使用它,除非初始化它将导致未定义的行为(这是造成崩溃的常见原因)。
更具体地说,问题可能是当您试图打印名称时,因为name指针可以指向任何地方。
发布于 2015-06-17 08:57:54
您似乎没有分配正在创建的结构。请注意,当您声明诸如Student *newStudent;这样的变量时,您首先必须分配它。因为到目前为止,您只声明了一个包含指向结构的的Student指针的变量,但是这个指针没有指向任何位置。因此,在任何地方都可以使用malloc函数,这是一个有效的指针:
newStudent = malloc(sizeof(newStudent));
https://stackoverflow.com/questions/30883017
复制相似问题