C++将数据从文件读取到 char* 中
C++ reading data from a file into a char*
我正在尝试从文件中读取行并将它们保存到 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();
相关文章:
- 将"uint8_t"(从套接字读取)隐式转换为"char"安全吗
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 通过 char* 缓冲区读取 int 的行为是不同的,无论是正数还是负数
- 从带有 std::ifstream::read() 的文件中读取 int 遍历 char * 二进制数据
- 将 ifstream 读取到 char* 以进行 int 和字符串转换
- 是否很好地定义了强制转换为仅由 char[] 组成的结构并从该数组读取?
- char* 如何读取十六进制的这个整数?它在 ostream::write() 中是如何工作的
- 将文本文件读取为 const char* 有时有效,有时无效
- C 通过char读取文件字符串的文件char;崩溃
- 输入重定向读取整数和char C
- C 读取输入,直到线char数组的结束
- 如何通过C 读取CHAR的文件字符
- C 如何读取从文件到char数组的文本行
- 如何使用boost.asio读取整个Char类型的数据
- 交替读取为char*和wchar_t*
- 无法在C++中使用reinterpret_cast<char*>读取数据
- 在 C++11 中使用严格的混叠时,它是否定义为 _write_ 到 char*,然后从别名的非 char* 读取_
- 将二进制文件读入向量<char>读取小于完整文件
- 从char读取命令行
- 从 std::vector<unsigned char> 读取二进制数据的最简单方法?