Думаю, мне следует начать с того, что я только что установил linux (debian) на свой компьютер и ничего не знаю о работе в linux. Эта проблема, вероятно, из-за какой-то очень простой вещи.
Соответствующая часть кода похожа на это:
ifstream stockNames("names.txt");
while (!stockNames.eof())
{
string snline;
getline(stockNames,snline);
cout << snline << endl;
.
.
.
}
это должно напечатать первую строку файла names.txt. Вместо этого он печатает пустую строку. И когда я пытаюсь использовать snline в качестве входных данных для другой функции, я получаю сообщение об ошибке «Ошибка сегментации». Как мне изменить свой код, чтобы сделать это? Есть ли разница в использовании ifstream в linux? Потому что в Windows код работает просто отлично
Я написал простой код ниже
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, const char *argv[])
{
string dos = "names.txt";
ifstream stockNames(dos.c_str() );
string snline;
while (getline(stockNames,snline))
{
cout << snline << " ";
}
return 0;
}
содержимое файла names.txt
ABC
DEFG
ГБО
вместо того, чтобы показывать эти строки, cout << snline ничего не производит </p>
Еще одно обновление: я написал еще два кода.
(1)
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, const char *argv[])
{
cout << "program has initiated" << endl;
ifstream stockNames("names.txt");
if( !stockNames )
cout << "unable to open" << endl;
string snline;
while (getline(stockNames,snline))
{
cout << snline << endl;
}
return 0;
}
Результат такой, как я хотел. Сначала «программа инициирована», затем ABC, DEFG, HBO в разных строках. Но когда я изменяю эту часть
cout << snline << endl;
в
cout << snline << " hey" << endl;
Тогда ABC DEFG HBO не появляется и вместо этого выводится только «эй».
Это безумие, как это может быть ??
Кстати, я попытался отладить ddd, и когда я проверяю переменную snline, ddd выводит следующую строку
(GDB) Печать Snline
$ 2 = {статические npos = 4294967295, _M_dataplus = {> = {<__ gnu_cxx :: new_allocator> = {},}, _M_p = 0x804c1a4 "ABC \ r"}}
новое мини-обновление: когда я меняю соответствующую строку как "cout << snline <<" "<< endl;" то, что напечатано, это «BC», «FGH», «BO» в отдельных строках. Почему оператор << переписывает через snline ?? </strong>