我需要通过互联网传输数据包,其长度应该是动态的。
struct packet
{
int id;
int filename_len;
char filename[];
};
问题是零长度数组不符合 ISO 标准。
我应该使用char filename[1];
反而?但是之后sizeof(struct packet)
将不再返回正确的值。
我认为您应该在此处查看一些动态大小结构的现有示例以获取指导。我所知道的最好的例子是 Win32 中的 TOKEN API。他们使用宏 ANYSIZE_ARRAY,它只能解析为 1。Raymond Chen 写了一篇内容广泛的博客文章,详细说明了为什么要这样做
- https://devblogs.microsoft.com/oldnewthing/20040826-00/?p=38043
至于sizeof等操作失败。无论您为动态大小的结构选择什么解决方案,这都会失败。 sizeof 是一个编译时操作,您将在运行时重新调整结构的大小。它根本行不通。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)