Я прочитал строку из файла, и я пытаюсь преобразовать ее в int. По какой-то причине atoi()
(конвертировать строку в целое число) не принимает std::string
в качестве аргумента (возможно, некоторая проблема со строками vs c-strings vs char arrays?) - как мне получить atoi()
, чтобы работать правильно, поэтому я могу разобрать этот текстовый файл ? (собирается вытаскивать из него много ints).Не могу сделать atoi взять строку (строка против C-строки?)
Код:
int main()
{
string line;
// string filename = "data.txt";
// ifstream file(filename)
ifstream file("data.txt");
while (file.good())
{
getline(file, line);
int columns = atoi(line);
}
file.close();
cout << "Done" << endl;
}
Линейка вызывающих проблемы является:
int columns = atoi(line);
, который дает ошибку:
error: cannot convert
'std::string'
to'const char*'
for argument '1' to 'intatop(const char*)
'
Как я сделать atoi работу должным образом?
EDIT: спасибо, все работает! новый код:
int main()
{
string line;
//string filename = "data.txt";
//ifstream file (filename)
ifstream file ("data.txt");
while (getline (file,line))
{
cout << line << endl;
int columns = atoi(line.c_str());
cout << "columns: " << columns << endl;
columns++;
columns++;
cout << "columns after adding: " << columns << endl;
}
file.close();
cout << "Done" << endl;
}
также интересно, почему строка файла = "data.txt"; ifstream файл (имя файла) не удается, но
ifstream file("data.txt");
работает? (я в конечном итоге будет чтение файла сформировать командную строку, так нужно, чтобы это не строковый литерал)
Никогда не применяйте atoi. Он не может сообщить об ошибках. Используйте либо std :: strtoi, либо даже лучше, std :: stoi. – PlasmaHH
@PlasmaHH, Точно, но вы имеете в виду 'strtol'. 'boost :: lexical_cast' также может быть вариантом. Там * есть вопрос обо всем этом где-то IIRC. – chris
atoi, не сообщающий об ошибках, кажется полезным, он пытается работать, даже если что-то идет не так, а не бросает на меня исключение и уходит. Из www.cplusplus.com было установлено, что atoi хорош, потому что «гарантия отсутствия броска: эта функция никогда не выдает исключений». – user2333388