当我运行它时,我的程序崩溃了,我运行了调试器并报告了这个:
std::out_of_range
位于内存位置0x0066F6F4。
我的代码如下:
#include <iostream>
#include <string>
int main() {
std::string name = "Alexi";
for (unsigned int i = 0; i <= name.length(); i++) {
for (unsigned int x = 0; x <= i; x++) {
if (i == x) std::cout << name.at(x);
else std::cout << " ";
}
std::cout << '\n';
}
return 0;
}
任何帮助都将不胜感激。
答案 0 :(得分:4)
您应该i < name.length()
而不是i <= name.length()
#include <iostream>
#include <string>
int main() {
std::string name = "Alexi";
for (unsigned int i = 0; i < name.length(); i++) {
for (unsigned int x = 0; x <= i; x++) {
if (i == x) std::cout << name.at(x);
else std::cout << " ";
}
std::cout << '\n';
}
return 0;
}
答案 1 :(得分:2)
字符串name
的长度为5。
在内部,它存储在名为char []
的{{1}}(字符数组)中
name
存储在A
name[0]
存储在l
name[1]
存储在e
name[2]
存储在x
name[3]
存储在i
请注意,长度为5,但最大索引为4。
这是因为C和C ++数组是0-indexed