我目前正在尝试为一个赋值编写代码,而当我以为自己可以完成时,我总是收到太多的初始化错误,这是一个赋值,因此它必须是一个整数
这是我的结构:
struct Address {
int streetNumber;
char streetName[41];
int apartmentNumber;
char postalCode[8];
char city[41];
};
这是我的代码:
int main(void) {
struct Address addy = { { 0,"",0,"","" } };
当我放下第二个{}
时,它可以工作,但是除非我使用的是双{}
,否则我上载的服务器将不会接受它。
答案 0 :(得分:3)
下面的初始化程序有问题
struct Address addy = { { 0,"",0,"","" } };
因为struct Address
的第一个成员streetNumber
不能用{ 0,"",0,"","" }
初始化。
这就是编译器警告您的内容。
您还有一副大括号。将该行更改为:
struct Address addy = { 0, "", 0, "", "" };
对您看到该错误的其他行进行类似的更改。
答案 1 :(得分:3)
在使用双括号的地方不需要双括号。结构类型的正确初始化器:
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
括在括号中会导致编译错误。
答案 2 :(得分:-1)
您在帖子中发表了一个奇怪的声明:
当我放下第二个
.stop()
时,它可以工作,但是除非我使用的是双{}
,否则我上载的服务器将不会接受它。
如果您将{}
声明为数组,则双{}
语法将起作用:
addy
或者,如果声明struct Address addy[] = { { 0,"",0,"","" } };
的成员嵌入在另一个结构中:
Address