Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;写入文件时会出现奇怪的字符_C++ - Fatal编程技术网

C++ c++;写入文件时会出现奇怪的字符

C++ c++;写入文件时会出现奇怪的字符,c++,C++,当我运行这段代码,并在记事本/写字板中打开.dat文件时,它会显示一些奇怪的字符 #include<iostream> #include<fstream> using namespace std; class Student { int rollno; char name[20]; char div[20]; public: void accept() { cout<<"enter rollno"<

当我运行这段代码,并在记事本/写字板中打开.dat文件时,它会显示一些奇怪的字符

#include<iostream>
#include<fstream>
using namespace std;

class Student
{
    int rollno;
    char name[20];
    char div[20];
public:
    void accept()
    {
        cout<<"enter rollno"<<endl;
        cin>>rollno;
        cout<<"Enter name"<<endl;
        cin>>name;
        cout<<"Enter div"<<endl;
        cin>>div;
    }
    void write_rec()
    {
        ofstream f;
        f.open("Student.dat",ios::binary|ios::app);
        Student s;
        s.accept();
        f.write((char*)&s,sizeof(s));
        f.close();
    }
    void display()
    {
        ifstream f;
        Student s;
        f.open("Student.dat",ios::binary|ios::in);
        while(f.read((char*)&s,sizeof(s)))
            s.show();
        f.close();
    }
    void show()
    {
        cout<<rollno<<endl;
        cout<<name<<endl;
        cout<<div<<endl;
    }
};
int main()
{
    Student s;
    s.write_rec();
    s.display();

}
#包括
#包括
使用名称空间std;
班级学生
{
int-rollno;
字符名[20];
chardiv[20];
公众:
无效接受()
{
cout这条线:

    f.write((char*)&s,sizeof(s));

正在将学生对象的原始二进制字节写入文件。如果这不是您想要的行为,则需要执行其他操作,例如转换学生对象的成员字段(尤其是
rollno
变量,它是
int
)转换为ASCII文本字符串,并将这些字符串写入文件。

打开文件时,在两个位置:

    f.open("Student.dat",ios::binary|ios::app);
以及:

您以二进制方式打开。请尝试删除此选项

如您所见,这些是特定于平台的行为

看看

编辑:

当然,正如Jeremy所观察到的,您必须在文件中写入有意义的文本。在这一行:

    f.write((char*)&s,sizeof(s));

实际上,您正在将对象的每个字节(作为(char*))写入。如果您了解自己在做什么,并且这也是您想要观察的,那么就可以了。但是,也许您应该比较这两种输出,从这个方法和Jeremy的建议中得出的结果。

当您使用文本编辑器打开二进制文件时,很自然地会出现一些“奇怪的字符”。
    f.write((char*)&s,sizeof(s));