【问题标题】:Why do MFC .rc files sometimes have a manually inserted \0 at the end?为什么 MFC .rc 文件有时会在末尾手动插入 \0?
【发布时间】:2017-08-04 14:55:26
【问题描述】:

Within this article,我注意到 \0 被插入到 #define 语句中以构建版本字符串。我还在我正在维护的一些 MFC 项目中看到了它。在完成将版本资源移动到 .rc2 文件中的过程中,我可以使用一个标头包含来设置我所有项目的版本,我注意到 \0。在某些情况下它不会导致任何问题,但在某些情况下,生成的编译文件的属性窗口会显示一个尾随引号 (")。删除 \0 似乎没有任何伤害,但我不明白他们为什么会永远都需要。希望有一些了解这一点的老派 MFC 大师可以解释是否建议删除 \0。

例子:

    VALUE "FileVersion", VERSION_STR"\0" // <-- adding it here causes the version to show in the properties dialog as 1, 0, 4, 1" which is odd.  
    VALUE "InternalName", "DaHelper\0" // <-- what is the \0 for? Isn't it already a string literal null terminated without adding \0?

【问题讨论】:

  • 字符串完全按照 RC 文件中的输入插入(没有终止零)。如果在处理它们时需要将字符串以零结尾,则需要在资源字符串中包含零。
  • 那么为什么键 null 没有终止呢?查看对话框资源,我在引号中看不到额外的 \0 。在 microsoft 示例中,他们在宏定义中添加了 \0。那不是已经为空终止的字符串文字吗?这只是标准的 C/C++。
  • 不,这是一个 RC 文件 - 不同的规则。

标签: c++ visual-c++ mfc


【解决方案1】:

可能没有人对此有真正的答案。

文档也没有显示任何规则。 samples in the MSDN(您的链接)在使用字符串时显示相同的定义。只显示了几个。但我重新检查了 16 位的真实旧资源。它总是一样的。 VALUE 类型都以 \0 字符结尾。字符串在资源编辑器中为此类资源定义的接缝不会自动 \0 终止。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多