Не работает stoi в Xcode C++
Подскажите пожалуйста почему Xcode на маке ругается на stoi?
Пишет следующее:
Thread 1: signal SIGABRT libc++abi: terminating with uncaught exception of type std::invalid_argument: stoi: no conversion terminating with uncaught exception of type std::invalid_argument: stoi: no conversion (lldb)
void Read(vector<Car>& cars, vector<Bike>& bikes)
{
string s1, s2, s3, s4, s5, s6;
ifstream file("transports.csv");
for (int i = 0; i < 3; i++)
{
getline(file, s1, ';');
getline(file, s2, ';');
getline(file, s3, ';');
getline(file, s4, ';');
getline(file, s5, ';');
getline(file, s6);
cars.push_back(Car(s1, stoi(s2), stoi(s3), stoi(s4), stoi(s5), s6));
}
for (int i = 0; i < 3; i++)
{
getline(file, s1, ';');
getline(file, s2, ';');
getline(file, s3, ';');
getline(file, s4, ';');
getline(file, s5);
bikes.push_back(Bike(s1, stoi(s2), stoi(s3), stoi(s4), s5));
}
file.close();
}
Ответы (1 шт):
Как и написал в комментариях к вопросу, решил написать свой конвертер из string в int.
И вот что у меня получилось:
int toInt(string str)
{
int count = 0, value = 0;
bool check = false, err = false;
for (int i = 0; i < str.length(); i++)
{
if (!isdigit(str[i])) err = true;
}
if (err == false)
{
int* arr = new int[str.length()];
for (int i = 0; i < str.length(); i++)
{
arr[i] = (int)str[i] - 48;
}
int modif = arr[str.length()-1];
for (int i = str.length() - 1; i >= 0; i--)
{
modif = arr[i] * count;
if (check == false) modif = arr[i];
value = value + modif;
if (check == false) count = 10;
else count *= 10;
check = true;
}
delete[]arr;
return value;
}
else cout << "Ошибка! toInt принимает только строки с целочисленными значениями" << endl;
return 0;
}
Как ни странно это работает, однако есть зелененькое предупреждение C6386: Переполнение буфера при записи в "arr"... Не знаю может ли мне где-то это потом вылезти боком, пока что не сильно понимаю в работе памяти. Если кто шарит подскажите пожалуйста есть ли риски в работе с такой функцией и если да, то как поправить это предупреждение?