【发布时间】:2016-10-13 02:00:01
【问题描述】:
对于一个 c 编程类,我被告知使用 typedefs 按顺序创建以下结构:
//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 } }
【问题讨论】:
-
events[i] 将完全有效。在 C 中,数组表示法是指针算术的简写,所以 events[i] 等价于 *(events+i)
-
你从编译器得到什么警告?
-
@JeremyFriesner 如何访问结果字段?
events[i]->time->hour会正常工作吗? -
@user3386109
Segmentation fault (core dumped)虽然我试图访问这些项目并打印它们。那可能已经完成了