C 继续接收“初始化者太多”错误

C 继续接收“初始化者太多”错误,c,visual-studio,C,Visual Studio,我目前正在尝试为一个赋值编写代码,就在我认为可以完成的时候,我不断得到太多的初始化错误,这是一个赋值,所以它必须是一个int 这是我的结构: struct Address { int streetNumber; char streetName[41]; int apartmentNumber; char postalCode[8]; char city[41]; }; 这是我的代码: int main(void) { struct Address

我目前正在尝试为一个赋值编写代码,就在我认为可以完成的时候,我不断得到太多的初始化错误,这是一个赋值,所以它必须是一个int

这是我的结构:

struct Address {
    int streetNumber;
    char streetName[41];
    int apartmentNumber;
    char postalCode[8];
    char city[41];
};
这是我的代码:

int main(void) {
    struct Address addy = { { 0,"",0,"","" } };

当我删除第二个{}时,它可以工作,但是我正在上载的服务器将不会接受它,除非我使用双{}。

下面的初始值设定项是一个问题

struct Address addy = { { 0,"",0,"","" } }; 
因为结构地址的第一个成员,即streetNumber,不能用{0,0,,}初始化

这就是编译器警告你的

你有一副额外的牙套。将该行更改为:

struct Address addy = { 0, "", 0, "", "" }; 

对看到该错误的其他行进行类似的更改。

在使用双大括号的地方不需要双大括号。结构类型的正确初始值设定项:

struct Address
{
    int streetNumber;
    char streetName[41];
    int apartmentNumber;
    char postalCode[8];
    char city[41];
};
将是:

struct Address addr1 =
{
    319,                    // Street number
    "Honeydew Road",        // Street name
    207,                    // Apartment number
    "RG13 2PQ",             // Postal code
    "Reading"               // City
};
使用C99和指定的初始值设定项,您可以使用:

struct Address addr2 =
{
    .apartmentNumber = 0,
    .streetNumber = 719,
    .streetName = "Persimmon Way",
    .city = "London",
    .postalCode = "EC1A 3JN",
};
请注意,对于指定的初始值设定项,顺序并不重要

如果坚持使用双大括号,请注意,可以将常规标量变量的初始值设定项括在大括号中,也可以不括在大括号中:

int i1 = 0;       // Legitimate
int i2 = { 0 };   // Also legitimate
但是,在结构初始值设定项中,不能在标量周围使用大括号,但可以在数组周围使用大括号:

struct Address addy = { 0, { "" }, 0, { "" }, { "" } };

尝试将0括在大括号中会导致编译错误。

您再次使用了curly

您生成的代码表示addy.streetNumber={0,0,}

它会出错。因为streetNumber的类型只是int,所以不能有不同的值

正确的代码是

结构地址Addy={0,0,0}


祝你过得愉快,伙计。

你在帖子中说了一句奇怪的话:

当我删除第二个{}时,它可以工作,但是我正在上载的服务器不会接受它,除非我使用双{}

如果将addy声明为数组,则双{}语法将起作用:

struct Address addy[] = { { 0,"",0,"","" } };
或者,如果声明地址时其成员嵌入到另一个结构中:

struct Address {
    struct {
        int streetNumber;
        char streetName[41];
        int apartmentNumber;
        char postalCode[8];
        char city[41];
    };
};
您尝试使用与结构地址不兼容的复合文字来初始化结构

它尝试将复合文字{{0,0,,}与您的结构匹配,因为统一失败,您会得到该错误

如果剪切可以成功统一size=1结构地址数组的不完整或完整的外圆括号,或者如果您的结构地址将嵌套在其他结构中,则统一可能成功

所以你需要写作

 struct Address addy = { 0,"",0,"","" }

欢迎来到堆栈溢出。请注意,在这里说“谢谢”的首选方式是,一旦你有足够的声誉,就投票选出好的问题和有用的答案,并接受对你提出的任何问题最有用的答案,这也会给你的声誉带来一点提升。请参阅页面,并将and或作为嵌入式结构
 struct Address addy = { 0,"",0,"","" }