Для класса AC программирования, мне сказали, чтобы создать следующие структур с определений типов, в таком порядке:Использование таНос для создания указателя на несколько элементов структуры
//STRUCTS
struct time {
unsigned int hour;
unsigned int minute;
unsigned int second;
};//end struct time
struct date {
unsigned int month;
unsigned int day;
unsigned int year;
};//end struct Date
struct event {
char name[20];
struct time* time;
struct date* date;
};//end struct event
//TYPEDEFS
typedef struct time Time;
typedef struct date Date;
typedef struct event Event;
Оттуда я должен попросить максимальное количество создаваемых событий, затем выделите указатель с достаточной памятью для многих событий. Часть моей работы является:
Event *events;
//Ask for max number of events and allocate memory
printf("Number of events to add: ");
scanf("%d", &numEvents);
events = (Event*) malloc(sizeof(Event) * numEvents);
Однако, оттуда я не уверен, что нужно сделать, чтобы пройти через указатель для просмотра конкретного события. Я знаю, что это не просто массив, поэтому события [i] не будут работать. но помимо этого, я потерян. Мой (прерывистая) функция для получения события является:
void getEvent(Event *events, int index){
//variables
char title[20];
unsigned int day, month, year, hour, minute, second;
Event tempEvent;
//Ask for input
printf("Input title, date, and time.\n");
if(index == 0)
printf("example -> title: dd/mm/yy hh:mm:ss\n");
//Take input
scanf("%20[^:]: %u/%u/%u %u:%u:%u", title, &day, &month, &year, &hour, &minute, &second);
tempEvent = (Event) {*title, { hour, minute, second }, { month, day, year } };
events[index] = tempEvent;
}
Я знаю, что это не так, и я получил ошибку сегментации на тестирование.
Когда я компилирую, я получаю эти предупреждения (и некоторые повторы о подобных вещах):
Lab4.c: In function ‘getEvent’: Lab4.c:82:2: warning: braces around scalar initializer
tempEvent = (Event) {*title, { hour, minute, second }, { month, day, year } };
^ Lab4.c:82:2: note: (near initialization for ‘(anonymous).name[1]’)
Lab4.c:82:39: warning: excess elements in scalar initializer
tempEvent = (Event) {*title, { hour, minute, second }, { month, day, year } }
события [I] будет полностью работать. В C обозначение массива является сокращением для арифметики указателя, поэтому события [i] эквивалентны * (события + i) –
Кроме того, [не отбрасывайте возвращаемое значение malloc] (http://stackoverflow.com/questions/ 605845/делать-I-монолитно-заместитель на результат из-таНоса). –
Какие предупреждения вы получаете от компилятора? – user3386109