對於交流編程類,我被告知要創建的typedef以下結構,按照這個順序:使用malloc創建一個指向多個項目結構
//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);
但是,從那裏我不確定如何遍歷指針查看特定事件。我知道這不僅僅是一個數組,所以events [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 } }
事件[Ⅰ]將完全工作。在C中,數組符號是指針運算的簡寫,所以events [i]等於*(events + i) –
此外,[不要轉換malloc的返回值](http://stackoverflow.com/questions/ 605845/DO-鑄最結果-的-的malloc)。 –
你從編譯器得到了什麼警告? – user3386109