请问这是为什么啊?
抱歉手机截图,不清楚,代码如下,麻烦了
#include
#include
#include
using namespace std;
struct student
{
string name;
int num;
};
void creat()
{
fstream outfile("C:\stu.dat",ios::out);
student stu[2];
cout<<"输入学生数据:"< for(int i=0;i { cin>>stu[i].name>>stu[i].num; outfile.write((char*)&stu[i],sizeof(stu[i]));
}
outfile.close();
}
void show()
{
fstream infile("C:\stu.dat",ios::in);
student s[2];
cout<<"学生数据如下:"<<endl;
for(int i=0;i<2;i++)
{
infile.read((char*)&s[i],sizeof(s[i])); cout<<s[i].name<<" "<<s[i].num<<endl;
}
infile.close();
}
void main()
{ creat();
show();
}
fstream outfile("C:\stu.dat",ios::out)中文件路径应该为C:\stu.dat,另外这不是以二进制方式打开的文件,但你在写入和读取文件的时候read和write是以二进制方式进行的。
问题在string这个类型,不适合做持久化,或者说你需要进一步的调研如何使用它,替换为char*就可以了。
我在g++下运行一下程序没有问题:
try
struct student
{
char name[256];
int num;
};
#include <iostream>
#include <fstream>
using namespace std;
struct student
{
char name[256];
int num;
};
void creat()
{
fstream outfile("stu.dat",ios::out);
student stu[2];
cout<<"输入学生数据:"<<endl;
for(int i=0;i<2;i++)
{
cin>>stu[i].name>>stu[i].num;
outfile.write((char*)&stu[i],sizeof(stu[i]));
}
outfile.close();
}
void show()
{
fstream infile("stu.dat",ios::in);
student s[2];
cout<<"学生数据如下:"<<endl;
for(int i=0;i<2;i++)
{
infile.read((char*)&s[i],sizeof(s[i]));
cout<<s[i].name<<" "<<s[i].num<<endl;
}
infile.close();
}
int main()
{
creat();
show();
return 0;