C++将数据从文件读取到 char* 中

C++ reading data from a file into a char*

本文关键字:char 读取 文件 数据 C++      更新时间:2023-10-16

我正在尝试从文件中读取行并将它们保存到 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 = 

好像数据[]中的所有数据都被删除了。谁能告诉我为什么会发生这种情况?

感谢您的帮助。

既然你使用标准库(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();

您正在使用指针而没有为它们分配内存!您可以自己分配它们,但是如果您阅读的行数多于分配的内存,则必须小心。请试试这个垃圾代码。它使用 std 向量和字符串,您不必分配内存。您可能需要启用编译器的 std-C11 开关 (std::string::p ush_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();