我无法理解如何在数组结构中初始化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};
biblio[1] = {"Harry Potter e la Pietra Filosofale", "J.K.Rowling", 2003, 12.5};
}
但是当我编译时,它告诉我在'{'预期表达之前。 我怎么解决它?这些char数组给我带来了很多问题......
P.S。 我也尝试过使用
biblio[0].titolo = "Guida al C";
以这种方式对于struct的其他字段,但也以这种方式我有一个错误。
答案 0 :(得分:9)
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)
答案 1 :(得分:1)
还有另一种解决方案。
将您的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&#34 ;;因为你无法分配而失败 字符数组。您必须初始化它们,或使用函数 像strcpy。
为了更好地解释,你必须在正确的记忆区域初始化每个caractere。
例如
biblio [0] .titolo =" Guida al C&#34 ;; 必须在记忆中才能运作良好:
biblio[0].titolo[0] = 'G';
biblio[0].titolo[1] = 'u';
biblio[0].titolo[2] = 'i';
biblio[0].titolo[3] = 'd';
biblio[0].titolo[4] = 'a';
biblio[0].titolo[5] = ' ';
biblio[0].titolo[6] = 'a';
biblio[0].titolo[7] = 'l';
biblio[0].titolo[8] = ' ';
biblio[0].titolo[9] = 'C';
biblio[0].titolo[0] = '\0'; // (don't forget to initialize the end of your string)
这就是strcpy(或strncpy)做得非常好。
Ps:main(){}
gcc会自动放入 int main(){}默认情况下