Иногда необработанное исключение с atoi (string.c_str ()) Обновлено

ОБНОВИТЬ

Я думал, что Stoi (строка) решил это, но это работало только на некоторое время.
Я добавил код для splitString и расшифровал ниже.

Иногда я получаю необработанные исключения с помощью atoi (), используя то же значение.

Мой код выглядит так:

ifstream myfile ("Save.sav");
string line = "";
if (myfile.is_open())
{
while ( myfile.good() )
{
getline (myfile,line);

}
myfile.close();

line = StaticFunctions::decrypt(line);

}
vector<string> splitString = StaticFunctions::splitString(line, 's');
return atoi(splitString[0].c_str());

Поэтому он читает файл сохранения, затем расшифровывает его, а затем разбивает строку на «и». Когда я отлаживаю, файл сохранения всегда один и тот же, и первое значение равно 3.

Эта работа иногда, может быть, каждые 10 попыток. Таким образом, каждые 9 из 10 попыток я получаю необработанное исключение в … в ячейке памяти.

Мониторинг преобразованного значения показывает, что он всегда возвращает 3, а затем приложение не падает, пока я не запустил игру, что немного дальше в коде.

Если я удаляю atoi и просто возвращаю 3, приложение работает нормально.

Я пробовал strtod, но это не помогло.

Спасибо,

  • Markus

Код SplitString:

 vector<string> StaticFunctions::splitString(string str, char splitByThis)
{
vector<string> tempVector;
unsigned int pos = str.find(splitByThis);
unsigned int initialPos = 0;

// Decompose statement
while( pos != std::string::npos ) {
tempVector.push_back(str.substr( initialPos, pos - initialPos + 1 ) );
initialPos = pos + 1;

pos = str.find(splitByThis, initialPos );
}

// Add the last one
tempVector.push_back(str.substr(initialPos, std::min(pos, str.size()) - initialPos + 1));

return tempVector;

}

Расшифровать код (очень просто):

string StaticFunctions::decrypt(string decryptThis)
{
for(int x = 0; x < decryptThis.length(); x++)
{
switch(decryptThis[x])
{
case  '*':
{
decryptThis[x] = '0';
break;
}
case  '?':
{
decryptThis[x] = '1';
break;
}
case  '!':
{
decryptThis[x] = '2';
break;
}
case  '=':
{
decryptThis[x] = '3';
break;
}
case  '#':
{
decryptThis[x] = '4';
break;
}
case  '^':
{
decryptThis[x] = '5';
break;
}
case  '%':
{
decryptThis[x] = '6';
break;
}
case  '+':
{
decryptThis[x] = '7';
break;
}
case  '-':
{
decryptThis[x] = '8';
break;
}
case  '"':
{
decryptThis[x] = '9';
break;
}
}
}
return decryptThis;
}

0

Решение

Попробуйте вместо этого использовать strtol

strtol (splitString [0] .c_str (), NULL, 10);

0

Другие решения

Stoi (string) вместо atoi (string.c_str ()) решил это.

ОБНОВИТЬ:
Это не решило это.

0

По вопросам рекламы [email protected]