首页 > 解决方案 > 使用指定的初始化程序使用 `char []` 成员初始化嵌套结构

问题描述

我有以下嵌套struct定义:

typedef struct {
    int count;
    float cash;
    char item[50];//switch between array and pointer for testing initializers
    //char *item;
}Purchase;

typedef struct {
    int accnt;
    char acct_name[50];
    Purchase purch;
} Acct;

就其Purchase struct本身而言,以下初始化程序起作用:

//Uses member names:
/* 1 */Purchase p = {.count = 4, .cash = 12.56, .item = "thing"};
//  Note: this member:                          ^^^^^^^^^^^^^^^

对于嵌套结构Acct,以下工作:

// No member names:
/* 2 */Acct acct = {100123, "Robert Baily", {15, 12.50, "Tires"}};
//                                                      ^^^^^^^

但是当我尝试使用成员名称时,如第一个示例所示:

// Attempts to use member name, but fails the last one:
/* 3 */Acct acct3 = {.accnt = 100123, .acct_name = "Robert Baily", {acct3.purch.count = 15, acct3.purch.cash = 12.50, acct3.purch.item = "Tires"}};
// error occurs here ->                                                                                                                ^

我收到此错误: 22, 131 error: array type 'char [50]' is not assignable 使用会员char item[50]; in购买时`

我得到这个错误:22, 14 error: initializer element is not a compile-time constant 当使用成员char *item;Purchase (注意只有一个版本itemstruct任何时候的一部分,另一个被评论)

因此,总而言之,如果不使用/* 2 */上述语句中的命名赋值语句,我可以初始化嵌套结构,但是当我尝试使用命名赋值时,如char []语句中的类型所示/* 3 */,它会失败。

char []初始化 a或char *当它是嵌套结构构造的内部结构的成员时,我缺少什么?

我正在使用CLANG设置为 C99

标签: cstructnesteddesignated-initializer

解决方案


您正在尝试编译:

Acct acct3 = {.accnt = 100123, .acct_name = "Robert Baily", 
           {acct3.purch.count = 15, acct3.purch.cash = 12.50, acct3.purch.item = "Tires"}};

此初始化程序无效,因为acct3.purch不是 的字段名称Purchase。初始化时只使用最里面的字段名称。

Acct acct3 = {.accnt = 100123, .acct_name = "Robert Baily", 
              .purch = {.count = 15, .cash = 12.50, .item = "Tires"}};

推荐阅读