如何正确地为数组(结构类型)元素赋值?

How can I properly assign a value to an array (of structure type) element?

#include <stdio.h>

struct virus
{
    char signature[25];
    int size;
}v[2];

int main(void) {

    static v[0] = {"Yankee",1813};
    static v[1] = {"Doodle",2813};
    int i;

    for(i=0;i<=1;i++)
    {
        printf("%s %d\n",v[i].signature,v[i].size);
    }

    return 0;
}

我在此 C 代码中遇到编译器错误。

Error: Declaration syntax in function main()

我猜测 v[2] 中存在一些错误,因为它与 extern class 相关联,而 v[0]v[1] 与静态 class.

但是,我不确定这是唯一的原因还是其他原因?


编辑:我通过删除错误的语法来编辑代码。

v[2]的声明没有错误,问题在后面

你写了

 static struct v[0] = {"Yankee",1813};

其中试图定义大小为 0 的数组,默认情况下 C 标准不允许这样做。

也就是说,语法也错得离谱。那里没有合适的 type,请记住,struct 本身不是类型,而是关键字。 struct <something>实际上是一个类型.

那么,从逻辑的角度来看,您可能根本不需要一个新变量。如果您想使用 v 中的数组元素,只需使用变量名即可。像

#include <stdio.h>

struct virus
{
    char signature[25];
    int size;
}v[2] = { {"Yankee",1813}, {"Doodle",2813}}; //get it initialized, job done

int main(void) {

    int i;
    for(i=0;i<=1;i++)
    {
        printf("%s %d\n",v[i].signature,v[i].size);
    }

    return 0;
}

我会以更好的方式完成工作,恕我直言。


编辑:

如果您对分配单个元素感兴趣(而不是初始化),那么,您不能为此目的使用大括号括起来的初始化程序,这并不意味着赋值的 RHS 操作数。为此,您需要使用 compound literal,例如

v[0] = (struct virus){"Yankee",1813};
v[1] = (struct virus){"Doodle",2813};

也会完成这项工作。

不要混淆结构定义和变量声明,那是草率的做法。

改为使用 typedef:

typedef struct 
{
    char signature[25];
    int size;
} virus_t;

那么你可以随意声明这个类型的变量:

static virus_t v[2] = 
{
  {"Yankee",1813},
  {"Doodle",2813}
};

或者使用 指定的初始值设定项:

static virus_t v[2] = 
{
  [0] = {"Yankee",1813},
  [1] = {"Doodle",2813}
};