2
int main() {
    
    string str[5] = "ABCD";
    std::cout << str[3] << std::endl;
    std::cout << str[0] << std::endl;
    return 0;
}

此代码打印:

A B C D

A B C D

没看懂,怎么str[3]打印ABCD

编译器:GCC 6.3

4

3 回答 3

5

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

std::string str[5]

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

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::vectoror :或.std::arraystd::array<std::string> stringsstd::vector<std::string> strings

话虽如此,我怀疑您只需要一个字符串,即:

std::string str = "ABCD";

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

于 2019-11-15T07:14:15.613 回答
0

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

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

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

但你很可能意味着:

char str[5] = "ABCD";

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

string str = "ABCD";

std::cout << str[3] << std::endl;
于 2019-11-15T06:53:18.373 回答
-2

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

该行 string str[5] = "ABCD";只是简单地复制/初始化变量 str 的所有索引,其值ABCD类似于str[0] = "ABCD", str[1] = "ABCD",依此类推。

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

我希望我没有错。:(

于 2019-11-15T07:17:33.503 回答