【问题标题】:Is this valid C++ code? This doesn't work how it supposed to be这是有效的 C++ 代码吗?这不起作用
【发布时间】:2019-11-15 06:47:49
【问题描述】:
int main() {
    
    string str[5] = "ABCD";
    std::cout << str[3] << std::endl;
    std::cout << str[0] << std::endl;
    return 0;
}

此代码打印:

ABCD

ABCD

我没听懂,str[3] 是如何打印ABCD 的?

编译器:GCC 6.3

【问题讨论】:

  • 你用的是什么编译器?据我所知,这不应该编译
  • 你的问题是为什么不打印D和A,然后试试char str[5] = "ABCD";
  • @Mat 这是来自codechef.com/ide的GCC 6.3。
  • @acraig5075 我的问题是我不明白 str[3] 是如何工作的?我的意思是它指向哪里?

标签: c++ arrays string gcc6


【解决方案1】:

该代码不是有效的 C++ 代码,不应编译。而且它不适用于 7 以上的 clang 和 gcc 版本。这很可能是旧版本 gcc 中的一个错误,已在版本 7 中得到修复。

std::string str[5]

这里有一个由std::string 的5 个元素组成的C 数组。这是你将如何初始化它:

std::string strings[5] = {"1st string", "2nd string", "3rd string", "4th string", "5th string"};

在这种情况下,strings[0] 将是 "1st string"strings[3] 将是 "4th string"

但是不要这样做。不要在 C++ 中使用 C 数组。如果需要字符串数组,请使用std::vectorstd::arraystd::array&lt;std::string&gt; stringsstd::vector&lt;std::string&gt; strings

话虽如此,我怀疑你只想要一个字符串,又名:

std::string str = "ABCD";

在这种情况下,str[0]'A'str[3]'D'

【讨论】:

  • 我认为会做的是,str[3] 将打印一个空格,然后 str[0] 打印第一个元素,即 ABCD。
  • @Sicario 我已经添加了 str[0]str[3] 的意思。
【解决方案2】:

你可以试试这个来编译你的代码:

string str[5] = {"ABCD", "", "", "", ""};

str[3] 在你的代码中意味着 4 如果你编译了数组的字符串。

但你最有可能是:

char str[5] = "ABCD";

string 和 char 不是一回事。如果要访问字符串中的单个字符,则不需要字符串数组。您只需要一个字符串:

string str = "ABCD";

std::cout << str[3] << std::endl;

【讨论】:

  • 这不能回答 OP 的问题。
  • @BarisYakut 现在应该。
  • @OblivionreinstateOurMonica 我当然可以尝试,但我不明白 str[3] 是如何工作的?我的意思是它指向哪里?
  • @Sicario 如果您需要字符串的第 4 个字符,您需要尝试最后一个代码 sn-p。
  • @Sicario 在我的 sn-p 中最后一个 str[3] 指向字符串 str 的第 4 个字符。 string 具有 [] 运算符和 at 函数,可让您访问字符串的字符。所以字符串有点类似于向量,如果这样更容易理解的话
【解决方案3】:

如果我没有错,因为我不熟悉 C++ 语言,那么正在发生的事情是:

string str[5] = "ABCD"; 行只是简单地复制/初始化变量 str 的所有索引,其值为 ABCD,如 str[0] = "ABCD", str[1] = "ABCD",等等。

因此,当您运行std::cout &lt;&lt; str[3] &lt;&lt; std::endl;std::cout &lt;&lt; str[0] &lt;&lt; std::endl; 时,您将从字符串变量的相应索引中获取值。

我希望我没有错。 :(

【讨论】:

  • 这就是我的想法。 int main() { string str[5] = "ABCD"; std::cout
  • 是的,这里也一样。但我不知道为什么要投反对票。期待那些投反对票的人的解释。 ;_;
  • 你能解释一下它是怎么发生的吗? @bolov
  • @OMiShah 我在回答 stackoverflow.com/a/58872004/2805305 时做了。如果有什么不清楚的地方,请随时在这里或在我的回答中问我。
猜你喜欢
  • 2011-10-19
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
相关资源
最近更新 更多