#include <iostream>
#include <fstream>
#include <cassert>
#include <cstring>
using namespace std;
const int WL = 20;
const int WR = 1000;
void READ (ifstream &, char[], char[][WL], int &);
void PRINT (char [][WL], int, int, int );
int main()
{
ifstream file;
string fileName;
cout << "enter file name";
getline(cin, fileName);
char name[] = fileName;
char Word[WR][WL];
int row = 0;
int WordMax;
int WordMin;
file.open(name);
assert(! file.fail() );
READ (file, name, Word, row);
file.close();
cout << "file successfully opened" << endl;
cout << "word length: \n";
cout << "min: ";
cin >> WordMin;
cout << "max: ";
cin >> WordMax;
PRINT(Word, row, WordMin, WordMax);
system("pause");
return 0;
}
Как я понимаю, проблема в том, что я не могу использовать fileName
в char name[]
, потому что это string
, но char name[]
будет использоваться в коде позже... что я могу изменить, чтобы исправить это?
Не c_str()
новое name
переменной для этого, просто используйте метод c_str()
для std::string
:
string fileName;
//...
getline(cin, fileName);
//...
file.open(fileName.c_str());
//...
READ (file, fileName.c_str(), Word, row);
Вы можете просто преобразовать строку в char один раз, как это filename.c_str()
Например, char name[] = fileName.c_str();
Сначала определите: char name[sizeof(fileName)]
; Затем вы можете использовать strcpy(name, fileName.c_str());
Должен работать, но вам может понадобиться управлять нулевым случаем, проверив значение fileName, прежде чем передавать его в массив символов.
sizeof(fileName)
НЕ имеет никакого отношения к длине строки. Кроме того, вы не можете определить длину строки пользователя во время компиляции.
#include <string>
или#include <string.h>