仅初始化C中的一个嵌套结构

问题描述 投票:1回答:1

假设有一个结构'Contact',它有两个不同的结构。

struct Name {
    char firstName[31];
    char lastName[36];
};

struct Numbers {
    char cell[15];
    char home[15];
};

struct Contact {
    struct Name name;
    struct Numbers numbers;
};

现在,我将仅通过int main()中的Contact变量初始化所有两个嵌套结构(Name,Numbers)。

struct Contact contact[2] =
{ {"Jay", "Greene"}, {14, 15},
  {"Jay2", "Greene2"}, {16, 17} };

enter code here`printf("%s \n\n", contact[0].name.firstName); //output: Jay

现在,我想初始化(删除)联系人[0]的所有名称,但我想保留联系人[0]的号码。

这是我无法弄清楚的事情。我可以逐个初始化每个字符串,但我希望一次性使每个成员都在contact.name中。

我可以像这样初始化。

printf("%s \n\n", contact[0].name.firstName); //output: Jay

//initialization of all the members in contact[0].name, one by one.
contact[0].name.firstName[0] ='\0'; 
contact[0].name.lastName[0] ='\0';

printf("%s", contact[0].name.firstName); //no output here.

但如果Name构造中有数百个成员,我不能这样做。

例如,我试过这个。

contact[0].name = {0}; //first trial
contact[0].name = {{0}, {0}}; //second trial

两者都发生编译错误。如果我想初始化所有嵌套结构,我可以使用memset。但是在这里我只需要初始化contact.name,而不是contact.numbers。请帮我。

c arrays pointers struct
1个回答
4
投票

您将初始化与赋值混合。

这是初始化:

struct Contact contact[2] =
{ {"Jay", "Greene"}, {14, 15},
  {"Jay2", "Greene2"}, {16, 17} };

它是声明变量并赋予其初始值的组合。

这是作业:

contact[0].name = 0; 

它为已声明的变量分配新值。

通过初始化结构,您可以指定结构的每个成员的值。通过赋值,您一次只能为一个成员分配值。

另请参阅David提供的链接,C11 Standard (draft n1570) - 6.7.9 Initialization特别是Note 19

© www.soinside.com 2019 - 2024. All rights reserved.