c++ - 在 C++ 中,这段文件处理代码有什么问题?

标签 c++ file-io

我是 C++ 的新手,特别是文件处理。 我做了这个代码。

#include <iostream>
#include <fstream>
using namespace std;
class student
{
    public:
    char s;
    int age;
};
int main (void)
{
    student a;
    a.s = 'a';
    a.age = 1;
    ofstream myfile;
    myfile.open("a1.txt",ios::app);
    myfile.write(reinterpret_cast<char*>(&a),sizeof(student));
    return 0;
}

当我打开文件 a1.txt 时,它的字符 a 是正确的,但是对于整数,它有一些奇怪的编码和一条消息,如果你继续编辑这个文件,它将被破坏。我不能将对象写入包含整数和字符或字符串的文件吗?

最佳答案

您正在将 student 的二进制表示写入文件。角色会如预期的那样出来;但 int 将是用于表示值的字节,而不是可读数字。

如果您希望输出格式化为可读文本,请使用格式化输出:

myfile << a.s << ' ' << a.age << '\n';

为方便起见,您可以为您的类重载运算符:

ostream & operator<<(ostream & os, student const & a) {
    return os << a.s << ' ' << a.age;
}

myfile << a << '\n';

对于更复杂的结构,您可以考虑 Boost.Serialization图书馆。或者,您可能会做我倾向于做的事情,使用元组而不是普通结构,并使用可变参数模板来读取和写入它们,但这可能比您想要的更繁琐。

关于c++ - 在 C++ 中,这段文件处理代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25582025/

相关文章:

python - 是否可以就地修改文件中的行?

c++ - 适用于 iOS 和 Android 的 C++ 文件操作

javascript - 通过在 jQuery 中单击将 INPUT FILE 值复制到 INPUT TEXT

c++ - 多态性在没有指针/引用的情况下是否可以在 C++ 中工作?

ruby-on-rails - 如何使用 ruby​​ on Rails 2.3.9 和 ruby​​ 1.8.7 从文件系统中删除文件

c++ - 当其他进程可能正在使用它时删除 boost interprocess_mutex

C++ 用重载的输出运算符替换 toString

java - 如何获取JAVA文件中最后写入的位置?

c++ - 实现 Dijkstra 算法

c++ - 在 Crypto++ 中使用原始 RSA 算法加密和解密消息?