繁体   English   中英

C初始化结构体数组的char数组

[英]C Initialize a char array of a struct array

我不明白如何在数组结构中初始化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数组给我带来很多问题...

PS Ive也尝试使用

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,就可以像这样初始化Array。

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}
};

在预处理时,编译器将能够初始化数组

大卫·赫弗曼的回应

您的写作尝试

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

为了更好地解释,您必须在正确的存储区中初始化每个角色。

例如

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

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(){}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM