读取文件时将数据保存到指针数组

时间:2019-01-13 22:38:06

标签: c++ pointers memory

我不明白为什么我的指针数组只保存我正在读取的文件的最后一行。当我将字符串文字替换为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 :(得分:1)

编写data = s而不是data = strdup(s)来对内容进行复制。否则,您将一次又一次分配相同的指针,并且将一次又一次覆盖该指针指向的内存内容。最后,您的临时缓冲区将包含文件的最后一行,并且所有指针都将精确指向该缓冲区。那就是你所观察到的...