c++ - 如何将字符串数组写入二进制文件?

标签 c++ arrays pointers binary fstream

我将 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;
}

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

输出:

最佳答案

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

你可以简单地通过这种方式来完成。

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) 期望它返回数组大小但会返回指针大小。

关于c++ - 如何将字符串数组写入二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35106853/

相关文章:

C++11:将 std::is_pointer 扩展为 std::shared_ptr

c++ - 当需要指向全局函数的指针时如何使用指向成员函数的指针?

c++ - 代码在运行时崩溃,但在调试时不会崩溃

java - 如何将字符串数组转换为字节数组? ( java )

在函数外部更改静态变量的值

objective-c - Swift转换C的uint64_t与使用自己的UInt64类型不同

c++ - 成员初始值设定项列表中的赋值操作

Javascript Math.random() 函数

Javascript - 按对象数组中对象的一个​​属性进行分组

c++ - 在 C++ 中创建非二叉树结构