如何将字符串数组写入二进制文件?
How to write array of strings into binary file?
我正在将包含 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("[=10=]", 1);
}
my_file.close();
}
这是初学者的常见错误之一 - sizeof(pointer type)
期望它 returns 数组大小但会返回指针大小。
我正在将包含 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("[=10=]", 1);
}
my_file.close();
}
这是初学者的常见错误之一 - sizeof(pointer type)
期望它 returns 数组大小但会返回指针大小。