在C中定义一组结构?
main.h
#define DATA struct data DATA { int id; char data; }
main.c中
DATA *listOfData[100];
所以在这一点上,我将/应该能够访问列表中的DATA,如下所示:
printf(listOfData[5]->data);
它不是让我这样做的,运行只是在最后一次打印时冻结……没有任何错误或任何错误。
这是因为您已经定义了一个指针数组。 但你从来没有初始化任何指针。
因此:
printf(listOfData[5]->data);
将崩溃(未定义的行为),因为您在索引5处取消引用(无效)指针。
*(这是定义结构的一种非常奇怪的方式……)
要解决此问题,您需要为数组中的每个指针分配。 如果你实际上并不需要它是一个指针数组,那么最好只使它成为struct本身的数组:
DATA listOfData[100];
并将其作为:
listOfData[5].data
然后,您不必处理分配每个元素。
我不确定为什么printf
会冻结,但这有几个问题。 首先, DATA*
数组中的所有指针都是未初始化的。 您可能打算创建一个DATA
数组,而不是DATA
指针数组:
DATA listOfData[100];
你也没有用分号结束结构,所以它甚至不太可能编译:
#define DATA struct data DATA { int id; char data; };
最后,你以一种相当不安全的方式使用printf
; 第一个参数需要是格式字符串,否则如果第一个参数中包含%
,则可能会出现奇怪的行为:
printf("%c\n", listOfData[5].data);
您尚未显示DATA *的任何内存分配。 将数组声明为结构数据数组,如:
DATA listOfData[100];
或者动态分配内存并在数组中分配指针。