Имя пользователя, введенное пользователем

0
#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-strings
stdstring

3 ответа

1

Не c_str() новое name переменной для этого, просто используйте метод c_str() для std::string:

string fileName;
//...
getline(cin, fileName);
//...
file.open(fileName.c_str());
//...
READ (file, fileName.c_str(), Word, row);
0

Вы можете просто преобразовать строку в char один раз, как это filename.c_str()

Например, char name[] = fileName.c_str();

  • 0
    Так что просто замените строку fileName на fileName.c_str ()? Потому что тогда он говорит, что он не объявлен, как я могу это объявить?
  • 0
    @Mastarg Я считаю, что вы должны #include <string> или #include <string.h>
Показать ещё 5 комментариев
-1

Сначала определите: char name[sizeof(fileName)]; Затем вы можете использовать strcpy(name, fileName.c_str()); Должен работать, но вам может понадобиться управлять нулевым случаем, проверив значение fileName, прежде чем передавать его в массив символов.

  • 0
    sizeof(fileName) НЕ имеет никакого отношения к длине строки. Кроме того, вы не можете определить длину строки пользователя во время компиляции.
  • 0
    имя символа [sizeof (fileName)]; cout << «введите имя файла»; getline (cin, fileName); strcpy (name, fileName.c_str ()); нравится? Из-за той же проблемы
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню