Проблемы с переполнением стека ifstream

Я относительно новичок в C ++ и программировании в целом, поэтому я предполагаю, что моя ошибка довольно проста. В любом случае, я работаю над сканированием последовательностей ДНК из файлов .txt и пытаюсь запрограммировать их так, чтобы пользователь мог указать имена файлов данных из командной строки. Я включил всю функцию для справки, однако особая проблема, которую я получаю, заключается в том, что я не смог заставить файл фактически открыться, программа всегда возвращает сообщение «Невозможно открыть файл». Часть, с которой у меня возникают проблемы (я думаю), является последней для цикла, но я включил всю функцию для справки.

int dataimport (int argc, char* argv[]){

vector<string> mutationfiles (argc -1); //mutationfiles: holds output file names
vector<string> filenames (argc - 1);    //filenames:     holds input file names

if (argc > 1){
for ( int i = 1; i < argc; ++i){
string inputstring = argv[i];         //filename input by user
filenames[i-1] = inputstring;         //store input filename in vector
stringstream out;
out << inputstring << "_mutdata.txt"; //append _mutdata.txt to input file names
mutationfiles[i-1] = (out.str());     //store as output file name
inputstring.clear();                  //clear temp string
}
}

else{
cout << "Error: Enter file names to be scanned" << endl;
system("PAUSE");
return EXIT_FAILURE;
}for(int repeat = 0; repeat < argc; ++repeat){

ifstream myfile;                                     //open input file
myfile.open (filenames[repeat].c_str());

ofstream myfile2;                                    //open output file
myfile2.open (mutationfiles[repeat].c_str());

string all_lines;

if (myfile.is_open()){
while ( myfile.good() ){                         //scan data
getline (myfile,all_lines,'\0');
}
myfile.close();                                  //close infile
}

else{                                                //error message
cout << "Unable to open file\n";
system("PAUSE");
return EXIT_FAILURE;
}
}
}

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация или что-нибудь, что я должен изучить, чтобы я мог лучше помочь себе!

0

Решение

for(int repeat = 0; repeat < argc; ++repeat)

должно быть

for(int repeat = 0; repeat < argc - 1; ++repeat)

Кроме того, я не вижу ничего, что могло бы вызвать ошибку, которую вы получаете.

Если вы исправите это и по-прежнему будете получать ошибки, я попытался бы напечатать имена, чтобы убедиться, что содержимое ваших двух векторов правильное.

for(int repeat = 0; repeat < argc - 1; ++repeat)
{
cout << filenames[repeat] << endl;
cout << mutationfiles[repeat] << endl;
}
1

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

+ Изменить for ( int i = 1; i < argc; ++i) в for ( int i = 0; i < argc; i++)

а также

менять filenames[i-1] = inputstring; в filenames[i] = inputstring;

а также

менять mutationfiles[i-1] в mutationfiles[i],

-1