У меня есть следующее вложенное 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
(Обратите внимание, что только одна версия item
является частью struct
в любом один раз другой комментируется)
Итак, в итоге, я могу инициализировать вложенную структуру хорошо, если не использовать именованные операторы присваивания, как в операторе /* 2 */
выше, но когда я пытаюсь использовать именованные присваивания, как показано для char []
типов в операторе /* 3 */
происходит сбой.
Чего мне не хватает для инициализации char []
или char *
, когда он является членом внутренней структуры вложенной структуры struct?
Я использую CLANG
, установленный на C99