【问题标题】:How to write array of strings into binary file?如何将字符串数组写入二进制文件?
【发布时间】:2016-05-08 12:09:18
【问题描述】:

我将 5 个字符串的数组发送到将它们写入二进制文件的函数中。我的问题是我该怎么做?如果我通过指针发送数组,如何检查数组的大小?我包括了#include <string>using namespace std;

void my_func(string *array, int n)
{
ofstream my_file("file.bin", ios_base::binary);
if (!my_file)
{
    cout << "error" << endl;
    return;
}
my_file.write((char*)array, n*sizeof(string));
my_file.close();
}

void fun1()
{
string array[5];
for (int i = 0; i < 5; i++)
{
    cout << "enter word " << i + 1 << ": ";
    getline(cin, array[i]);
}
my_func(array,5);
return;
}

所以这行得通,但是我没有使用太多字节,我想获取正确数量的字节。或者,如果有一种简单的方法可以做到这一切,我将不胜感激。请给我一个学校的例子,我是一名学生。

输出:

【问题讨论】:

  • string 是如何定义的?
  • @LogicStuff 我会发图片
  • 您正在将std::string 的实现写入文件而不是其内容。
  • 不清楚stringstd::string,灵溪。 OP 没有提供足够的信息来得出结论。
  • 我用@PeteBecker 的更多信息编辑了帖子。

标签: c++ arrays pointers binary fstream


【解决方案1】:

我覆盖了我的答案,因为第一个版本的编写存在一些误解

你可以通过这种方式简单地做到这一点。

void my_func(string *str_array, int n)
{
    ofstream my_file("file.bin", ios_base::binary);
    if (!my_file.is_open()) {
        cout << "error" << endl;
        return;
    }
    for (int i = 0; i < n; i++) {
        // If strings are null-terminated use +1 to separate them in file
        my_file.write(&str_array[i][0], str_array[i].length() + 1);
        // If strings aren't null-terminated write a null symbol after string
        // my_file.write("\0", 1);
    }
    my_file.close();
}

这是初学者的常见错误之一 - sizeof(pointer type) 期望它返回数组大小但会返回指针大小。

【讨论】:

  • 鉴于写入文件的目的通常是为了随后可以读入,所以这是有问题的。读者无法获得长度信息以进行阅读。除非写入文件的单个字符串是 ALL。
  • @Peter,可能是null-terminated 字符串。
  • @ComradeAndrew 但我想写一个字符串数组,而不仅仅是一个字符串
  • @Kira,哦,对不起。那么int n 是这个字符串的数量吗?
  • @ComradeAndrew 非常感谢你,是的,这正是我所期待的。谢谢。
猜你喜欢
  • 1970-01-01
  • 2010-10-15
  • 2016-01-15
  • 2017-06-06
  • 1970-01-01
  • 2020-08-28
  • 2021-10-27
  • 2012-09-22
  • 2016-10-03
相关资源
最近更新 更多