我有以下类型的代码:
typedef struct
{
u32 count;
u16 list[];
} message_t;
...
message_t* msg = (message_t*)buffer;
msg->count = 2;
msg->list[0] = 123;
msg->list[1] = 456;
size_t total_size = sizeof(*msg) + sizeof(msg->list[0]) * msg->count;
send_msg( msg, total_size );
Run Code Online (Sandbox Code Playgroud)
有问题的线是sizeofs的线.我不确定这是计算所需空间的正确方法.是否sizeof(*msg)包含有关该list成员的内容?
我可以用我的编译器测试它,但是在这种情况下每个编译器的工作方式是否相似?
Gra*_*and 11
这是标准所说的:
作为一种特殊情况,具有多个命名成员的结构的最后一个元素可能具有不完整的数组类型; 这被称为灵活的阵列成员.在大多数情况下,将忽略灵活数组成员.特别地,结构的尺寸好像省略了柔性阵列构件,除了它可以具有比省略意味着更多的拖尾填充.