Хорошо, поэтому я довольно новичок в C и знаю только основные функции C, и я пытаюсь создать программу, которая позволяет пользователю создавать студент - структурировать и обновлять свои личные и академические детали - также структуры и члены студенческой структуры.«Ошибка сегментации» Ошибка при попытке назначить и вызвать значения вложенной структуры в C
//student.h
struct personalDetails {
char name[20];
char phoneNum[13];
char address[30];
};
struct classRecords {
int assignment;
int midterm;
int finalMark;
int total;
};
struct student{
struct personalDetails det;
struct classRecords rec;
}st1, *st1_ptr,
st2, *st2_ptr,
st3, *st3_ptr,
st4, *st4_ptr,
st5, *st5_ptr;
И всякий раз, когда я запускаю свою программу, и прийти к той части, где пользователь должен ввести значение, которое должно быть назначено или вызываемому в/из структуры я получаю ошибку сегментации. Вот то, что код выглядит как на один из примеров, когда я присваиваю значение:
//operations.c
#include<stdio.h>
#include"student.h"
#include<string.h>
extern struct personalDetails det; // name, phoneNum, address
extern struct classRecords rec; // assignment, midterm, finalMark, total
extern struct student st1; // student 1
extern struct student *st1_ptr; // student 1 pointer
extern struct student st2;
extern struct student *st2_ptr;
extern struct student st3;
extern struct student *st3_ptr;
extern struct student st4;
extern struct student *st4_ptr;
extern struct student st5;
extern struct student *st5_ptr;
struct student *studentID(int id) { // identifies student by ID
if (id == 1) {
return st1_ptr;
}
else if (id == 2) {
return st2_ptr;
}
else if (id == 3) {
return st3_ptr;
}
else if (id == 4) {
return st4_ptr;
}
else if (id == 5) {
return st5_ptr;
}
}
char name[20];
void updateName() { // updates student name
printf("Enter student's name\n");
scanf("%19s", name);
strcpy(studentID(1)->det.name, name);
}
void main() {
updateName();
printf("Student1 Name: %s", studentID(1)->det.name);
}
Любых советы ценятся, но помните мое знание C довольно минимально. Имейте в виду, что я не знаю, как правильно использовать указатели (возможно, очевидно в коде), но если кто-то может объяснить, как использовать их в этом обстоятельстве, это было бы здорово. Кроме того, из того, что я видел в других сообщениях, использование malloc и sizeof, похоже, является общим ответом на такие проблемы, но если возможно, я хотел бы держаться подальше от них, потому что мой профессор не упомянул о необходимости любой из эти функции. Заранее спасибо
Edit 1: добавлена инициализация к сообщению
'return st1_ptr;' и т. Д., Это * uninitiliased * указатели, кроме глобальной инициализации по умолчанию, в 'NULL'. –
@WeatherVane Я инициализировал их (не уверен, что я сделал правильно), но я добавлю их к сообщению – rsorce
Вы дали только половину истории. Можете ли вы подготовить [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve) –