为什么小弟我用C++写入到文本中的信息出现乱码,求高手解决

为什么我用C++写入到文本中的信息出现乱码,求高手解决
#include <iostream>
#include<fstream>
#include<iomanip>
#include<stdlib.h>
using namespace std;
const int std_size=3;



struct student{
  char name[20];
  int id;
  char hometown[40];
  char sex[10];
  int value;
  };

int main()
{
  student stdinfo[std_size],stdcopy[std_size];
  cout<<"请输入学生的信息:"<<endl;
  for(int i=0;i<std_size;i++){
  cout<<"学生的姓名:";
  cin>>stdinfo[i].name;
  cout<<"学生的家乡:";
  cin>>stdinfo[i].hometown;
  cout<<"学生的id号:";
  cin>>stdinfo[i].id;
  cout<<"学生的性别:";
  cin>>stdinfo[i].sex;
  cout<<"学生的分数:";
  cin>>stdinfo[i].value;
  system("cls");
  }
  ofstream fp;
  fp.open("studentinformation.txt",ios::binary|ios::app);
  for(int i=0;i<std_size;i++){
  fp.write((char*)&(stdinfo[i]),sizeof(stdinfo[i]));

  }
  fp.close();
   
  ifstream infile("studentinformation.txt",ios::binary);
  if(infile.is_open()){
  cout<<"打开文件成功!"<<endl;
  for(int j=0;j<std_size;j++){
  infile.read((char*)&(stdcopy[j]),sizeof(stdinfo[j]));
  }
  }else{
  cout<<"打开文件失败!"<<endl;
  }
  cout<<"学生的信息:"<<endl;
  cout.flags(ios::left);
  cout<<setw(10)<<"姓名"<<setw(10)<<"id号"<<setw(10)<<"性别"<<setw(10)<<"家乡"<<setw(10)<<"成绩"<<endl;
  for(int k=0;k<std_size;k++){

  cout<<setw(10)<<stdcopy[k].name<<setw(10)<<stdcopy[k].id<<setw(10)<<stdcopy[k].sex<<setw(10)<<stdcopy[k].hometown<<setw(10)<<stdcopy[k].value<<endl;

  }
  infile.close();
}

















------解决方案--------------------
int main()
{
student stdinfo[std_size],stdcopy[std_size];

cout<<"请输入学生的信息:"<<endl;
for(int i=0;i<std_size;i++){
memset(stdinfo, 0, sizeof(stdinfo[i]));
------解决方案--------------------
int main()
{
student stdinfo[std_size],stdcopy[std_size];

cout<<"请输入学生的信息:"<<endl;
for(int i=0;i<std_size;i++){
memset(&stdinfo[i], 0, sizeof(stdinfo[i]));