c结构变量赋值中的编译错误

c结构变量赋值中的编译错误,c,struct,variable-assignment,C,Struct,Variable Assignment,对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。我希望两者

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编译器中编译的。

这就是C的设计和工作方式。你无能为力。如果有结构变量,则只能通过声明中的初始值设定项或稍后初始化单个成员来初始化它



将来,在发布有关编译器错误的问题时,请在问题中包含完整且未经编辑的错误日志。

初始值设定项只能在声明时使用。如果您想在声明后初始化
b
,那么可以使用复合文字(C99特性):

b =  (struct udata){"ashok", 10, 'c'};  

GCC还支持将coound文本作为

您要做的事情不能直接在标准C中完成。最好的标准便携解决方案是使用临时:

const struct udata tmp = {"ashok", 10, 'c'};
b = tmp;
但是,在实践中,编译器通常(但并非总是!)允许以下情况(*注意如下):

(*注意:我相信至少MSVC不支持这种语法,可能还有很多其他语法;但只是把它扔出去。不过,GCC确实支持这种语法)

b = (struct udata){...};