У меня проблема, которая меня действительно смущает ... Ниже я вызываю функцию инициализации:
void Initialize (List *L) {
char* initialize = "initialize";
int i;
for (i=0; i<MAXLISTSIZE; i++) {
strncpy(L->items[i].name,initialize,MAXNAMESIZE);
L->items[i].name[MAXNAMESIZE - 1] = '\0';
L->items[i].grade = 0;
printf("L->items[i].name = %s\n", L->items[i].name);
printf("L->items[i].grade = %d\n", L->items[i].grade);
}
L->count = 0;
}
И, похоже, работает, я печатаю значения в цикле, и это нормально. Если я также печатаю внутри идентичного цикла в main для двойной проверки, это также работает, но если я просто печатаю значения в main после функции initialize (без операторов print в Initialize), я получаю полный мусор.
Кажется, память, в которой я храню свои значения, не остается согласованной, и я не могу понять, почему.
Нужно ли распределять память по структурам? Поскольку мне не нужен переменный объем памяти, я подумал, что в этом нет необходимости ... Я не уверен, как это сделать.
Мои структуры:
typedef Student Item;
#define MAXLISTSIZE 4
typedef struct {
Item items[MAXLISTSIZE];
int count;
} List;
#define MAXNAMESIZE 20
typedef struct {
char name[MAXNAMESIZE];
int grade;
} Student;
Я просто вызываю Initialize from main:
int main () {
List *newList;
/*call initialize function*/
newList = callInitialize();
return 0;
}
callInitialize:
List *callInitialize () {
List *L;
List studentList;
L = &studentList;
Initialize(L);
return L;
}