【发布时间】:2012-06-07 14:47:17
【问题描述】:
我的问题是:如何在 C++ 中将 .txt 文件的内容存储在名为 m_str 的 char* 中?
请注意,我的文件具有我想要保留的非常明确的格式。我不想将这些行合并在一起。我希望第 1 行保留在第 1 行,第 2 行保留在第 2 行。因为最终我要序列化 char* 并通过网络发送它,当节点接收到它时,它将对其进行反序列化,然后将内容放入文件中并像在原始文件中一样读取行。
谢谢。
【问题讨论】:
我的问题是:如何在 C++ 中将 .txt 文件的内容存储在名为 m_str 的 char* 中?
请注意,我的文件具有我想要保留的非常明确的格式。我不想将这些行合并在一起。我希望第 1 行保留在第 1 行,第 2 行保留在第 2 行。因为最终我要序列化 char* 并通过网络发送它,当节点接收到它时,它将对其进行反序列化,然后将内容放入文件中并像在原始文件中一样读取行。
谢谢。
【问题讨论】:
您可以将矢量用作:
std::ifstream file("file.txt");
std::istreambuf_iterator<char> begin(file), end;
std::vector<char> v(begin, end); //it reads the entire file into v
char *contentOfTheFile= &v[0];
文件的内容存储在contentOfTheFile。你可以使用它,也可以修改它。
【讨论】:
#include <vector>
#include <fstream>
#include <stdexcept>
void foo() {
std::ifstream stream("file.txt");
if (!stream) throw std::runtime_error("could not open file.txt.");
std::vector<char> str(std::istreambuf_iterator<char>(stream),
(std::istreambuf_iterator<char>()));
char* m_str = str.data();
}
应该做你需要的。
【讨论】:
str 不是对象;它是一个函数声明。原因 ; C++ 令人头疼的解析!
std::vector<char> str(std::istreambuf_iterator<char>(stream), std::istreambuf_iterator<char>(stream)); 是一个函数声明 :) Fortunately,编译器可以捕获错误,因为您使用了两次参数名称stream。