C++ c++;写入文件时会出现奇怪的字符
当我运行这段代码,并在记事本/写字板中打开.dat文件时,它会显示一些奇怪的字符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"<
#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));