我试图在对角线上显示字符串时遇到c ++程序崩溃

时间:2015-01-22 22:42:43

标签: c++ string visual-studio loops

当我运行它时,我的程序崩溃了,我运行了调试器并报告了这个: 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;
}

任何帮助都将不胜感激。

2 个答案:

答案 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