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

时间:2017-12-23 07:46:01

标签: c arrays pointers struct

假设有一个结构'联系人'它有两种不同的结构。

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。请帮帮我。

1 个答案:

答案 0 :(得分: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