Я читал об этом, и я предполагаю, что получаю эту ошибку из-за того, что не выделял указатель перед его использованием в моей программе. Это так? Как я буду делать это, если это так? (ДОМАШНЯЯ)Сегментация Неисправность при печати объектов Struct
Struct находится в файле data.h
typedef struct student
{
char *firstName;
char *lastName;
int GPA;
float tuitionFees;
int numClass;
}Student;
Это находится в файле с именем student.c
Student Student_create()
{
Student *myStudent = malloc(sizeof(Student));
assert(myStudent != NULL);
printf("Please enter a name: ");
scanf("%20s",myStudent->firstName);
printf("\nPlease enter a family name: ");
scanf("%20s",myStudent->lastName);
printf("\nEnter number of enrolled classes: ");
scanf("%d",&myStudent->numClass);
printf("\nEnter students GPA: ");
scanf("%d",&myStudent->GPA);
printf("\nEnter tuition Fee: ");
scanf("%f",&myStudent->tuitionFees);
return myStudent;
}
void Student_print(Student *who)
{
fflush(stdout);
printf("First Name: %s\n, ",who->firstName);
printf("Last Name: %s\n", who->lastName);
printf("\tTuition Fees: %f\n, ",who->tuitionFees);
printf("Number of Courses: %d\n , ",who->numClass);
printf("GPA : %d\n, ",who->GPA);
}
И основной файл я пытаюсь получить к нему доступ через помечена col_personal.c
int main(int argc, char *argv[])
{
//This is for the input
int choice;
mainMenu();
return 0;
}
void mainMenu()
{
int choice = 0;
Student class[10];
int ssize = 0;
while(choice != 10){
printf("\n\n\n\t\t\t====School Database====\n");
printf(" 1. Add a new record\n");
printf(" 2. Print Students.\n");
scanf("%d",&choice);
//CHOICE ADD NEW RECORD.
if(choice == 1)
{
printf("1.Student\n");
fflush(stdin);
scanf("%d",&choice);
if(choice == 1){
printf("How many students would you like to input? ");
scanf("%d",&choice);
//Creates Students
for(int i=0; i<choice;i++){
class[i] = Student_create();
ssize = ssize + 1;
}
}
//PRINTING STUDENTS CHOICE 2
} else if (choice == 2){
for(int i=0; i < ssize;i++){
Student_print(class[i]);
}
'char * firstName;' и 'char * lastName;' Кажется, у вас нет выделения, прежде чем вы попытаетесь отсканировать их в них :( –
Не по теме, так как это вопрос «исправить мой багги» без какого-либо явного понимания с вашей стороны .... Вы должны скомпилировать все предупреждения & debug info ('gcc -Wall -Wextra -g'), используйте отладчик (' gdb') и, возможно, [valgrind] (http://valgrind.org/) и [ASAN] (https: //en.wikipedia .org/wiki/AddressSanitizer) и прочитайте документацию по стандартным функциям, которые вы используете ('printf':' \ n' должен быть в конце строки управления; 'scanf': вы должны проверить количество отсканированных объектов) –
Могу ли я передать класс [i] = Student_create(), так? – Genesis