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
该代码不是有效的 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::vector
or :或.std::array
std::array<std::string> strings
std::vector<std::string> strings
话虽如此,我怀疑您只需要一个字符串,即:
std::string str = "ABCD";
在这种情况下str[0]
是'A'
和str[3]
是'D'
你可以试试这个来编译你的代码:
string str[5] = {"ABCD", "", "", "", ""};
str[3]
在你的代码中意味着 4 如果你编译了数组的字符串。
但你很可能意味着:
char str[5] = "ABCD";
string 和 char 不是一回事。如果要访问字符串中的单个字符,则不需要字符串数组。您只需要一个字符串:
string str = "ABCD";
std::cout << str[3] << std::endl;
如果我没有错,因为我不熟悉 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;
,您将从字符串变量的相应索引中获取值。
我希望我没有错。:(