C初始化struct数组的char数组

时间:2014-01-14 16:49:05

标签: c arrays struct char

我无法理解如何在数组结构中初始化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的其他字段,但也以这种方式我有一个错误。

2 个答案:

答案 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(){}默认情况下