【问题标题】:8 characters recognized as 9 in if statement8 个字符在 if 语句中识别为 9
【发布时间】:2026-01-19 10:20:13
【问题描述】:

我正在尝试做一个 if 语句来查看名称是否等于特定单词。该名称只有 8 个字符长,因此我只能将其与 8 个或更少字符的单词进行比较。

但我遇到的问题是,如果我比较这两个值,我会得到这个错误:

'initializing': 无法从'initializer list' 转换为 'std::array'

当我从字符串中删除一个字母时,我想将其与它进行比较,不会再出现错误。但对我来说,为什么 Visual Studio 认为有 9 个字符而只有 8 个字符似乎没有意义。我之前使用比较来检查只有 4 个字符的字符串,这似乎工作正常。

if (lumps[i + h].name == TFixedString<8>{"LINEDEFS"})
{

}

【问题讨论】:

  • 这看起来像 c++ 或基于错误消息的东西,而不是 c#
  • TFixedString 定义为什么?还有lumps[i + h].name,那是std::string吗?
  • @user3678781 类型对你来说不重要?
  • "LINEDEFS" 实际上包含 8 个字符加上终止的 '\0' 字符。因此 9.
  • 嗯,当我想比较的名字似乎是 9 个字符时,我怎么能比较呢?我才意识到我把 C 而不是 C++,我的错误

标签: c++ arrays if-statement character


【解决方案1】:

所有数组都从 0 开始,所以如果你有一个 8 的数组,它实际上是 9。

【讨论】:

  • 什么?没有。int a[10]; 为您提供 10 个元素,索引从 0 到 9。
  • 我的意思是,如果你有一个 5 的数组并且你想打印一个名字,比如说'James',它只会打印出'Jame',因为空终止符需要一个数组中的空间
  • @ProgStudent 如果你是这个意思,那你应该这么说。