我不明白为什么我的指针数组只保存我正在读取的文件的最后一行。当我将字符串文字替换为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();
}
答案 0 :(得分:1)
编写data = s
而不是data = strdup(s)
来对内容进行复制。否则,您将一次又一次分配相同的指针,并且将一次又一次覆盖该指针指向的内存内容。最后,您的临时缓冲区将包含文件的最后一行,并且所有指针都将精确指向该缓冲区。那就是你所观察到的...