以 std::out_of_range 类型的未捕获异常中止错误终止
Terminating with uncaught exception of type std::out_of_range aborted error
我正在尝试制作一个将字符串转换为字符数组的程序。我的代码看起来像这样(这只是我代码的一部分):
#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);
}
}
但是当我运行这段代码并给它一个输入时它输出这个语句
terminating with uncaught exception of type std::out_of_range: basic_string
Aborted
不知道为什么会这样。请帮我修复一下,谢谢你的阅读。
您写的超出了 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] = '[=10=]'; //very important
读取或写入超出范围在 C/C++ 中是一件坏事。这是一个很好的点,黑客可以利用它来使你的程序生病......
注意:我没有测试它......我直接从我的 phone
写的
你的代码有一些错误:
您正在使用可变长度数组,即not standard C++。动态数组需要分配 new[]
(或者更好,std::vector
)。
您的循环超出 std::string
的范围。 at()
方法执行边界检查,对索引 >= size()
抛出 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;
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] = '[=10=]';
// 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...
}
我正在尝试制作一个将字符串转换为字符数组的程序。我的代码看起来像这样(这只是我代码的一部分):
#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);
}
}
但是当我运行这段代码并给它一个输入时它输出这个语句
terminating with uncaught exception of type std::out_of_range: basic_string Aborted
不知道为什么会这样。请帮我修复一下,谢谢你的阅读。
您写的超出了 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] = '[=10=]'; //very important
读取或写入超出范围在 C/C++ 中是一件坏事。这是一个很好的点,黑客可以利用它来使你的程序生病...... 注意:我没有测试它......我直接从我的 phone
写的你的代码有一些错误:
您正在使用可变长度数组,即not standard C++。动态数组需要分配
new[]
(或者更好,std::vector
)。您的循环超出
std::string
的范围。at()
方法执行边界检查,对索引 >=size()
抛出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;
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] = '[=10=]';
// 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...
}