Hej, jag tänkte skriva ett litet program som tar ett String-objekt och gör om dess innehåll så att det blir skrivet i rövarspråket istället (ni vet det där språket där man dubblar alla konsonanter och sätter in ett "o" mellan dem).
Men när jag kompilerar programmet får jag felmeddelandet:
Unhandled exception at 0x7c81eb33 in Robberlanguage.exe: Microsoft C++ exception: std::out_of_range @ 0x0012fc80.
Och sedan hamnar jag mitt i (närmare bestämt rad 605) en header (tror jag) som heter xstring, där det överst står: "// xstring internal header (from <string>)".
Här är källkoden:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string text_normal;
string text_robber;
cout << "Type a text that will be turned into robberlanguage: ";
getline(cin, text_normal);
cout << endl;
text_robber.reserve(text_normal.size()*3); // Reserverar 3x mer plats utifall
// att texten bara består av
// konsonanter.
for(int i=0; i < text_normal.size(); i++)
{
if(text_normal[i] == ('B' || 'C' || 'D' || 'F' || 'G' || 'H' || 'J' || // Alfabetets konsonanter,
'K' || 'L' || 'M' || 'N' || 'P' || 'Q' || 'R' || // både versaler resp. gemener.
'S' || 'T' || 'V' || 'W' || 'X' || 'Z' || 'b' ||
'c' || 'd' || 'f' || 'g' || 'h' || 'j' || 'k' ||
'l' || 'm' || 'n' || 'p' || 'q' || 'r' || 's' ||
't' || 'v' || 'w' || 'x' || 'z'
)
)
{
text_robber.append(text_normal[i] + 'o' + text_normal[i]); // Dubblar konsonanten och sätter
} // ett "o" mellan dem.
else
{
text_robber.append(text_normal[i]); // Lägger till vokalen.
}
}
cout << text_robber << endl;
cin >> text_normal;
return 0;
}
Det kan vara så enkelt som att cout inte får en nullterminerad sträng. Då fortsätter den att läsa från strängens minne även utanför det allokerade utrymmet. Ett sådant fel skulle faktiskt ge ett out_of_range-fel.
Det kan vara så enkelt som att cout inte får en nullterminerad sträng. Då fortsätter den att läsa från strängens minne även utanför det allokerade utrymmet. Ett sådant fel skulle faktiskt ge ett out_of_range-fel.
Nej. C++-stränger använder sig inte av null-terminering.