Сохранение данных в массив указателей при чтении из файла - PullRequest
0 голосов
/ 14 января 2019

Я не понимаю, почему мой массив указателей сохраняет только последнюю строку из файла, из которого я читаю. Когда я подставляю строковый литерал в функцию setData (), код работает просто отлично. Все, что содержит файл "mann" - это набор слов в алфавитном порядке. Спасибо.

#include <iostream>
#include <fstream>
using namespace std;

class orignialData {

char* data;

public:

    void setData(char* s) { data = s;}
    char* getData() const {return data;}
};

class dataClass {
    orignialData** W_;

public:

    dataClass(char* filename);

    void addData();
    void viewAll();
};

dataClass::dataClass(char* filename) {


    fstream file;

    file.open(filename, ios::in);

    if (file.fail()) {
        cout << "There was an error reading the file...\n";
    }

    W_ = 0;
    W_ = new orignialData*[5];

    for (int i = 0; i < 5; i++)
        W_[i] = new orignialData;

    char buff[30];
    char* temp;

    while(file >> buff) {

        cout << buff << endl;

        static int i = 0;

        W_[i] -> setData(buff);

        i++;
    }

    file.close();

}

1 Ответ

0 голосов
/ 14 января 2019

Вместо data = s напишите data = strdup(s), чтобы сделать копию содержимого. В противном случае вы будете назначать один и тот же указатель снова и снова и перезаписывать содержимое памяти, на которое этот указатель указывает снова и снова. В конце ваш временный буфер будет содержать последнюю строку вашего файла, и все указатели будут указывать именно на этот буфер. Это то, что вы наблюдаете ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...