C ++将文件中的数据读入char *

时间:2014-04-05 17:36:53

标签: c++ char fstream cout

我正在尝试从文件中读取行并使用以下代码将它们保存到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如果数据[]中的所有数据都已被删除。任何人都可以告诉我为什么会这样吗?

感谢您的帮助。

2 个答案:

答案 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();