我有一个问题,为什么我们不能在C中运行时之前定义结构的成员。我有以下结构设置并准备好了:
struct GSM{
char* status;
char* make;
char* accept;
char* connect;
char* exit;
};
struct GSM GSM_comms = NULL;
现在我知道我无法在main()之外定义此结构的成员。但是我真的很想知道为什么。
是否因为结构需要在堆栈上分配并指向堆上的可变数据?
编辑:
我不能这样做:
struct GSM{
char* status;
char* outbound;
char* inbound;
char* exit;
};
struct GSM GSM_comms;
GSM_comms.status = &variable;
int main(){
}
答案 0 :(得分:1)
您用于初始化结构的语法无效。您正在尝试将NULL
(一个指针)分配给您的结构的实例(而不是指针)。
要初始化struct
,您需要为花括号括起来的结构中的每个值提供值:
struct GSM GSM_comms = { NULL, NULL, NULL, NULL, NULL };
编辑:
您可以在函数之外执行此操作的原因:
GSM_comms.status = &variable;
是因为这是一个赋值,而不是初始化。只有定义(带有可选的初始值设定项)才能出现在函数外部。你需要这样做:
struct GSM GSM_comms = { &variable, NULL, NULL, NULL, NULL };