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[])
。