下班了,都辛苦了,帮小白调个简单的程序,多谢

下班了,都辛苦了,帮小白调个简单的程序,谢谢
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class News{
public:
 News ()
 {number=0;name=string("unkonw");score1=0;score2=0;}
 News(int value1,string value2,double value3,double value4);
     int getnumber()
 { return number;}
  double getscore1()
 { return score1;}
  double getscore2()
 { return score2;}
 string name;
private:
    int number;

 double score1,score2;
};
News::News(int value1,string value2,double value3,double value4)
{
 number=value1;
    name=value2;
 score1=value3;
 score2=value4;
}
int main(){
 News student[3]={
  News(1217,"周瑶",86.0,90.0),
  News(1212,"刘畅",89.0,88.0),
  News(1213,"李毅",93.0,98.0)};
  ofstream outf("text.txt");  //向文件输入数据
  int i;
  if(!outf)
  { cout<<"cannot open";
    exit(1);
  }
  outf<<"学号"<<' '<<' ';
  outf<<"姓名"<<' '<<' '<<' ';
  outf<<"高数"<<' '<<' ';
  outf<<"线代"<<"\r\n";
  for( i=0;i<=2;i++){

   outf<<student[i].getnumber()<<' '<<' ';
   outf<<student[i].name<<' '<<' '<<' ';
   outf<<student[i].getscore1()<<' '<<' '<<' ';
   outf<<student[i].getscore2()<<"\r\n";

  }

      ofstream fout("text.dat",ios::out|ios::binary|ios::app);                               //以二进制方式向文件输入数据
if(!fout)
  { cout<<"cannot open";
    exit(1);
  }

for( i=0;i<=2;i++)
{
 fout.write(reinterpret_cast<char *>(&student[i]),sizeof(student[i]));

}

fout.close();

ifstream inf("text.dat",ios::in|ios::binary);     //将数据再次输入内存
News stu[3];
for(i=0;i<=2;i++)
{
 inf.read(reinterpret_cast<char *>(&stu[i]),sizeof(stu[i]));
    cout<<stu[i].getscore1();
}
inf.close();

  return 0;
 }

------解决方案--------------------
引用:
感觉没有问题啊,怎么出错。
顺便问下默认的构造函数
 News ()
 {number=0;name="unkonw";score1=0;score2=0;}
name 为string类型的。这个name=“unkonw”是怎么处理的,是在堆上还是在栈上