Одна часть проекта madLibs, которую я делаю для своего класса cs124, включает чтение файла и помещение каждого слова / фразы между пробелами в двумерный массив (fileArray
), где каждая строка состоит из отдельного слова. Проблема в том, что после того, как я прочитал файл, каждое выражение cout, которое я делаю, выдает ошибку Segmentation fault
.
Мне не разрешено использовать строки, все должно быть c-string или char []. Максимальный предел ввода для файла .txt составляет 256, а для каждого слова в файле - 32 символа. Я использую testfile.txt
для проверки своего кода;может не относиться к делу, но в файле просто есть текст: This is a test file to test the fileArray function in MadLibs project
#include <iostream>
#include <fstream>
using namespace std;
#define WORD_CHAR_LIMIT 32
#define ARRAY_SIZE 256
void readFile(char fileArray[][WORD_CHAR_LIMIT]);
int main()
{
char fileArray[ARRAY_SIZE][WORD_CHAR_LIMIT];
cout << "this is a test\n";
readFile(fileArray);
cout << "this is a test\n";
return 0;
}
void readFile(char fileArray[][WORD_CHAR_LIMIT])
{
char fileName[ARRAY_SIZE];
cout << "Please enter the filename of the Mad Lib: ";
cin >> fileName;
ifstream fin(fileName);
if (fin.fail())
return;
char data;
int i = 0;
int j = 0;
fin >> data;
while (!fin.eof())
{
if (data != ' ')
fileArray[i][j] = data;
else if (data == ' ')
{
i++;
j = -1;
}
j++;
}
fin.close();
}
Первая метка отображается на экране, как и должна, но затем, после вызова readFile()
, следующая метка выдает Segmentation fault (core dumped)
когда я ожидаю того же, что и первый кут:
[nbird11@LinuxLab02 ~]$ g++ project09.cpp
[nbird11@LinuxLab02 ~]$ a.out
this is a test
Please enter the filename of the Mad Lib: testfile.txt
Segmentation fault (core dumped)