【问题标题】:how does CHAR Name[1] can hold more than 1 charecter? [duplicate]CHAR Name[1] 如何容纳超过 1 个字符? [复制]
【发布时间】:2020-07-19 18:29:53
【问题描述】:

有人可以向我解释一下吗?我只是想了解它是如何工作的向我解释这一点,如果你链接一个来源,你从哪里得到这个信息谢谢。 (顺便说一下正在解析导入地址表)

【问题讨论】:

  • 请不要使用代码的图像,而是使用文本。作为这里的新用户,也可以使用tour 并阅读How to Ask
  • 您看到的是一种解决 C++ 中缺少 flexible array member 的方法。自 C99 标准以来,C 就已经有了它,但它通常是使用你看到的一种大小的数组来模拟的。考虑到命名,我怀疑您正在查看 Windows API 结构,因此可能比 C99 标准更早,需要使用此类“黑客”。我真的建议反对你试图在你自己的 C++ 代码中使用这些东西。
  • 第 18000 行...我什至无法想象...
  • 由于您标记为 C++,因此您不需要 typedef structtypedef struct 是 C 语言的保留。您的示例看起来更像 C 语言而不是 C++。

标签: c++ windows parsing portable-executable


【解决方案1】:

在您的示例中,Name 成员是结构结束位置的标记

这是早期 C 语言中的一个 hack,主要用于消息格式。

+------+------+    
| Hint | Name |  
+------+------+    
       ^      ^  
       |      +----- One end of the "message"  
       |  
       +----- Possible end of the message.  

Name 字段可能是可变长度的文本,因此它不能被声明为真正的数组(数组在运行时具有固定的容量),因此只分配了一个字符。

如果分配了零个字符,编译器可能会删除 Name 成员,因为它没有大小。

这不是安全的编码风格。

【讨论】:

  • 感谢您的帮助,但上面已经有人回答了我的问题。
猜你喜欢
  • 1970-01-01
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 2020-11-17
  • 2015-10-04
相关资源
最近更新 更多