程序在Visual Studio Community 2015中执行后,它会显示调试错误

After the program executes in Visual Studio community 2015 it shows debug error.

本文关键字:显示 错误 调试 执行 Visual Studio Community 2015 程序      更新时间:2023-10-16

一旦我输入字符串并按回车键,编译器就会显示调试错误并说遇到 abort()。到底出了什么问题?

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
     {   
         std::string str; 
         std::string rev;
         std::cout << "Enter the stringn";
         std::getline(std::cin, str);
         int len = str.size();
         for (int i = len; i > 0; i--)
         {
             std::string temp;
             temp= str.at(i);
             int j = 1;
             rev.insert(j, temp);
             j++;
         }
         std::cout << "The reversed string isn";
         std::cout << rev;
         cout << "Thank You";
         cin.get();
     }
 for (int i = len; i > 0; i--)

应该是

 for (size_t i = len - 1; i >= 0; i--)
              // ^^^         ^

声明

 temp= str.at(i);

否则,第一次迭代将超出范围。

c++ 中的索引在[0 ... (size - 1)]范围内。

前面的答案指出了str.at (i)的问题。还有另一个:在第一次迭代中,它调用 rev.insert (1, ...) .由于 rev 在这一点上的长度为零,因此这是越界访问,这将导致引发out_of_range异常,从而终止程序。

此外,将 j 的声明移出循环。现在,每次都以值 1 重新创建它。

将整个字符串对象用于 tmp 似乎矫枉过正。事实上,rev += str.at(i);可以取代整个环体。