C++——从二进制文件中读取动态分配的 vector

标签 c++ string file vector binary

我正在处理一个问题,但我不确定我是否正确地处理了这个问题,或者我什至是否有正确的方法。到目前为止,我的代码只会出现段错误。

我有一个简单的小收据编写程序来练习一些 C++ 概念,其中之一是二进制文件 i/o。我有几个数组保存数据(一个保存服务类型的字符串,另一个保存相应的双倍成本)。我有一个小菜单,二进制部分写得很好。但是,我不确定如何从文件中读回这些内容。

我目前正在使用一个结构来保存各种数据成员(客户姓名、总费用等),我想将他们选择的所有服务及其相应的价格写入一个文件,然后能够读回它们。这些当前存储在结构中的 vector 中。

我想我了解如何从二进制文件读取/写入字符串(写入字符串的长度,然后是数据,然后读回长度,然后将那么多字节读入字符串)。但是我如何使用 vector 来做到这一点?我知道如何使用固定大小成员(即整数)的 vector 来完成它,但是字符串 vector 呢?在这种情况下,成员没有设置大小,所以我不确定如何读回它们。

这可能吗?如果有人能指出我正确的方向,那将非常有帮助。大约一年前有一个类似的论坛帖子,但对我没有太大帮助。

tl;dr -- 如何从二进制文件中读取可变长度字符串的可变大小 vector ?

最佳答案

换句话说:

> How do I read the length back, then read that many bytes into a string with a vector?

一次一个字符串:

// Untested
std::vector<std::string> ReadSomeStrings(std::istream& inFile, size_t howMany) {
  std::vector<std::string> result;
  for(int i = 0; i < howMany; ++i) {
    std::size_t len;
    is.read(&len, sizeof len);
    std::string s(len, '\0');
    is.read(&s[0], s.size());
    result.push_back(s);
  }
  return result;
}

关于C++——从二进制文件中读取动态分配的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061508/

相关文章:

c++ - 文字是否在编译时进行类型转换?

c++ - ctags 如何用宏解析类定义,用于 C++

c++ - C++ 函数调用中的字符串引用未更新

c - 包含二进制文件作为常量数组

android - 在目录中写入文件

c++ - 将文件的当前写入指针传递给 C++ 中的函数

java - 将十进制/十六进制写入文件,而不是字符串

java - 如何打印一个字符串而另一个字符串继续打印?

java - 使用 Java/Groovy 替换字符串中的反斜杠

C# 使用其他域/用户名/密码将文件复制到另一个目录