如果代码是这样:
#include <iostream>
#include<fstream>
using namespace std;
//姓名和成绩以二进制方式保存,键盘输入
class Student {
public:
**char *s=new char[20]; **
int age;
};
int main()
{
Student s;
ofstream file1("c://file//dump.mp3", ios::out | ios::binary);
while (cin>>s.s>>s.age) {
cout << s.s << endl;
file1.write((const char*)&s, sizeof(s));
}
file1.close();
ifstream file2("c://file//dump.mp3", ios::in | ios::binary);
while (file2.read((char*)&s, sizeof(s)) ){
cout << s.s << " " << s.age << endl;
}
file2.close();
}
输入 Tom 13 和Jake 18后最后的输出结果是如下:
最后两行名字都是Jake。
但是如果将字符串改成char s[20];
#include <iostream>
#include<fstream>
using namespace std;
//姓名和成绩以二进制方式保存,键盘输入
class Student {
public:
**char s[20];**
int age;
};
int main()
{
Student s;
ofstream file1("c://file//dump.mp3", ios::out | ios::binary);
while (cin>>s.s>>s.age) {
cout << s.s << endl;
file1.write((const char*)&s, sizeof(s));
}
file1.close();
ifstream file2("c://file//dump.mp3", ios::in | ios::binary);
while (file2.read((char*)&s, sizeof(s)) ){
cout << s.s << " " << s.age << endl;
}
file2.close();
}
最后结果:
是正确的
请问为什么一定要是数组的方式才是对的?
自己去验证