c - 使用指定的初始化程序使用 `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
(注意只有一个版本item
是struct
任何时候的一部分,另一个被评论)
因此,总而言之,如果不使用/* 2 */
上述语句中的命名赋值语句,我可以初始化嵌套结构,但是当我尝试使用命名赋值时,如char []
语句中的类型所示/* 3 */
,它会失败。
char []
初始化 a或char *
当它是嵌套结构构造的内部结构的成员时,我缺少什么?
我正在使用CLANG
设置为 C99
解决方案
您正在尝试编译:
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"}};
推荐阅读
- rust - 在 Rust 中,如何将具有生命周期的对象推送到向量中?
- angular - 如何避免使用嵌套的 observables Angular 8
- ios - 为什么我的 Apps Documents 文件夹不可见?
- libgdx - ShapeRenderer (libgdx) 的发光效果
- bash - bash grep 变量中具有特定长度的字符串
- java - 与 JOptionPane 陷入循环
- python - 如何在 Django 的同一页面上使用登录表单和注册表单?
- javascript - 在 Javascript 中为对象数组创建不同的原点
- python - python - tkinter 命令 = 嵌套 for 循环中的 lambda 后期绑定问题
- python - 如何在 python 目录中添加所有包含 .h 文件