以未捕获的 std::out_of_range 类型异常终止错误

问题描述

我正在尝试制作一个字符串转换为字符数组的程序。我的代码看起来像这样(这只是我代码的一部分):

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string Word;
    cout << "Type A String And I'll Turn It Into A Char Array ' : ";
    cin >> Word;
    int Length = Word.length();
    char Char_Word[Length];
    //Looping To Set The String Characters To A Char Array
    for (int CharSet = 0; CharSet <= Length; CharSet++)
    {
        Char_Word[CharSet] = Word.at(CharSet);
    }
}

但是当我运行这段代码并给它一个输入时,它会输出这个语句

以 std::out_of_range 类型的未捕获异常终止:basic_string 中止

ERROR

不知道为什么会发生这种情况。请帮我修复它,感谢你阅读它。

解决方法

您的代码中有一些错误:

  • 您使用的是可变长度数组,即 not standard C++。动态数组需要用 new[] 分配(或者更好,用 std::vector)。

  • 您的循环超出了 std::string 的边界。 at() 方法执行边界检查,为索引 >= std::out_of_range 抛出 size() 异常。您的循环条件需要使用 < 而不是 <=

试试这个:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string Word;
    cout << "Type A String And I'll Turn It Into A Char Array ' : ";
    cin >> Word;
    size_t Length = Word.length();
    char *Char_Word = new char[Length+1];
    //Looping To Set The String Characters To A Char Array
    for (size_t CharSet = 0; CharSet < Length; CharSet++)
    {
        Char_Word[CharSet] = Word[CharSet];
    }
    Char_Word[Length] = '\0';
    // use Char_Word as needed...
    delete[] Char_Word;
}

然而,也就是说,std::string 已经是一个 char[] 数组。您可以使用字符串的 c_str()data() 方法获取指向字符串底层数组的指针。

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string Word;
    cout << "Type A String And I'll Turn It Into A Char Array ' : ";
    cin >> Word;
    const char *Char_Word = Word.c_str();
    // use Char_Word as needed...
}
,

您写入的字符超出了 char_word 变量的范围。

//First make enough space for char_word
int length = word.length()+1;
char Char_word[ length ];
for( int i = 0; i < length - 1; i++)
     Char_word[i] = word.at(i);
Char_word[length-1] = '\0'; //very important

超出范围的读取或写入在 C/C++ 中是一件坏事。黑客可以利用这一点来使您的程序生病... 注意:我没有测试……我直接用手机写的

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...