C:动态大小结构的推荐样式

2023-11-22

我需要通过互联网传输数据包,其长度应该是动态的。

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(使用前将#替换为@)

C:动态大小结构的推荐样式 的相关文章

随机推荐