我正在尝试从文件中读取行并使用以下代码将它们保存到char * data []变量中:
fstream level;
level.open("level.txt");
char* row;
int i = 0;
char* data[3];
while (level >> row) {
data[i] = row;
cout << i << " " << data[i] << "\n";
i++;
}
for (i = 0; i < 3; i++) {
cout << "\n " << i << " = " << data[i];
}
level.close();
该文件的内容如下:
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa
并且第一个cout输出以下内容,正如您所期望的那样:
0 aaaaaaaaaaaaaaaaaaaaaaaa
1 aaaaaaaaaaaaaaaaaaaaaaaa
2 aaaaaaaaaaaaaaaaaaaaaaaa
然后第二个输出以下内容:
0 =
1 =
2 =
as如果数据[]中的所有数据都已被删除。任何人都可以告诉我为什么会这样吗?
感谢您的帮助。
答案 0 :(得分:3)
由于您使用标准库(cout
),为什么不使用string
代替char*
?
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
fstream level;
level.open("level.txt");
string row;
int i = 0;
string data[3];
while ((i<3) && (level >> row)) {
data[i] = row;
cout << i << " " << data[i] << "\n";
i++;
}
for (i = 0; i < 3; i++) {
cout << "\n " << i << " = " << data[i];
}
level.close();
答案 1 :(得分:1)
您正在使用指针而不为它们分配内存! 你可以自己分配它们,但是如果你读的行多于分配的内存,你必须要小心。请试试这段垃圾代码吧。它使用标准向量和字符串,您不必分配内存。您可能需要启用编译器的std-C11开关(std :: string :: push_back)
fstream level;
level.open("level.txt");
char row;
int i = 0;
std::vector<std::string> > data;
data.push_back(std::string());
while (level >> row) {
if (row!='\n'){
data.back().push_back(row);
cout << row;
else{
data.push_back(std::string());
cout << "\n";
}
for (int i = 0; i < data.size(); i++) {
cout << "\n " << i << " = " << data[i].c_str();
}
level.close();