【问题标题】:how to store a file in a char*如何将文件存储在 char* 中
【发布时间】:2012-06-07 14:47:17
【问题描述】:

我的问题是:如何在 C++ 中将 .txt 文件的内容存储在名为 m_str 的 char* 中?

请注意,我的文件具有我想要保留的非常明确的格式。我不想将这些行合并在一起。我希望第 1 行保留在第 1 行,第 2 行保留在第 2 行。因为最终我要序列化 ​​char* 并通过网络发送它,当节点接收到它时,它将对其进行反序列化,然后将内容放入文件中并像在原始文件中一样读取行。

谢谢。

【问题讨论】:

标签: c++ c arrays char


【解决方案1】:

您可以将矢量用作:

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。你可以使用它,也可以修改它。

【讨论】:

  • 谢谢您的回答,您发布的代码 sn-p 是否与将文件保存在 char* 中相同?它会在不将行合并在一起的情况下读取文件吗?
  • @PeacefulSoul:你为什么不尝试一下,自己找出问题的答案呢?实验是学习的一部分。
【解决方案2】:
#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&lt;char&gt; str(std::istreambuf_iterator&lt;char&gt;(stream), std::istreambuf_iterator&lt;char&gt;(stream)); 是一个函数声明 :) Fortunately,编译器可以捕获错误,因为您使用了两次参数名称stream
  • @FredOverflow 我知道,我只是忘记了。
猜你喜欢
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 2012-07-21
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2019-05-22
相关资源
最近更新 更多