对struct
变量赋值有疑问。
struct udata
{
char name[50];
int num;
char ch;
};
void main()
{
struct udata a = {"ram", 20, 'a'};
struct udata b;
//b = {"ashok", 10, 'c'}; - illegal
b = a;
}
在上面的代码中,b = {"ashok", 10, 'c'};
提供了编译错误,但它接受b = a;
。我希望两者都是类似的任务,但我不知道为什么它不接受第一个。有人可以解释我为什么会这样吗?
注意:我正在使用fedora gcc编译器进行编译。
答案 0 :(得分:4)
初始化程序只能在申报时使用。如果你想在声明后初始化b
,那么你可以通过使用复合文字来实现它 - 一个C99特征:
b = (struct udata){"ashok", 10, 'c'};
GCC还支持复制文字作为extension。
答案 1 :(得分:3)
您尝试做的事情不能直接在标准C中完成。最好的标准和便携式解决方案是暂时使用:
const struct udata tmp = {"ashok", 10, 'c'};
b = tmp;
然而,在实践中,编制者经常(但并非总是如此!)允许以下内容(*请注意以下内容):
b = (struct udata){...};
(* 注意:我相信至少MSVC不支持这种语法,可能还有很多其他语法;但只是把它扔到那里。但是,GCC,支持它)
答案 2 :(得分:2)
这就是C的设计和指定方式。你无能为力。如果您有结构变量,则只能通过声明中的初始化程序或稍后初始化各个成员来初始化它。
将来,在发布有关编译器错误的问题时,请在问题中包含完整且未经编辑的错误日志。