C初始化结构数组的字符数组

C初始化结构数组的字符数组,c,arrays,struct,char,C,Arrays,Struct,Char,我不明白如何在数组结构中初始化字符数组。我编写了以下代码: typedef struct tomo { char titolo[100]; char autore[100]; int anno_pubblicazione; float prezzo; } t_libro; main(){ t_libro biblio[2]; biblio[0] = {"Guida al C", "Fabrizio Ciacchi", 2003, 45.2};

我不明白如何在数组结构中初始化字符数组。我编写了以下代码:

typedef struct tomo
{
    char titolo[100];
    char autore[100];
    int anno_pubblicazione;
    float prezzo;
} t_libro;

main(){
    t_libro biblio[2];
    biblio[0] = {"Guida al C", "Fabrizio Ciacchi", 2003, 45.2};
    biblio[1] = {"Harry Potter e la Pietra Filosofale", "J.K.Rowling", 2003, 12.5};
}
但是当我编译时,它告诉我在{之前应该有一个表达式。 我如何解决它?这些字符数组给了我很多问题

附言。 我也试着用

biblio[0].titolo = "Guida al C";
对于struct的其他字段,也是这样,我有一个错误

biblio[0] = {"Guida al C", "Fabrizio Ciacchi", 2003, 45.2};
这不是初始化。这是一个简单的赋值。只能在初始化中使用初始化语法。如下所示:

t_libro biblio[] = {
  {"Guida al C", "Fabrizio Ciacchi", 2003, 45.2},
  {"Harry Potter e la Pietra Filosofale", "J.K.Rowling", 2003, 12.5}
};
你的写作尝试

biblio[0].titolo = "Guida al C";
失败,因为无法分配给字符数组。必须初始化字符数组,或使用类似于
strcpy
的函数

您的
main
声明也错误。它应该是

int main(void)

还有一个解决办法

将char数组定义为typedef,您可以像这样初始化数组

typedef char T_STRING[100] ;

typedef struct tomo
{
    T_STRING titolo;
    T_STRING autore;
    int anno_pubblicazione;
    float prezzo;
} t_libro;

 t_libro biblio[] = {
  {"Guida al C", "Fabrizio Ciacchi", 2003, 45.2},
  {"Harry Potter e la Pietra Filosofale", "J.K.Rowling", 2003, 12.5}
};
在预处理时,编译器将能够初始化数组

来自David Hefferman的回复

你的写作尝试

biblio[0].titolo = "Guida al C";
biblio[0]。titolo=“Guida al C”失败,因为您无法分配给 字符数组。您必须初始化它们或使用函数 像strcpy

为了更好地解释,您必须初始化右侧内存区域中的每个字符

比如说

文献[0]。titolo=“Guida al C”; 必须在内存中才能正常工作:

这就是strcpy(或strncpy)做得很好的地方

Ps:main(){}

gcc将自动将
int main(){}默认情况下

我总是使用main(),它是有效的。现在我试试你的例子,然后我说它是否有效:)它可能对你的编译器总是有效。但它是错误的。在我的学院里,我学会了用这种方式制作…=s但是你的解决方案是有效的!非常感谢!有很多糟糕的教学在进行。
main()
可能适用于您的编译器,但它是非标准的。您的老师应该教您
int-main(void)
int-main(int-argc,char*argv[])