1 问题引出
在学习“二进制文件操作”时,书中有这么一个例程:
1 #include <iostream>
2 #include <fstream>
3 using namespace std;
4
5 struct student
6 {
7 char name[20];
8 int num;
9 char sex;
10 int age;
11 };
12
13 int main()
14 {
15 student stud[3] = {"li", 1001, 'f', 18, "fun", 1002, 'm', 19, "wang", 1004, 'm', 17};
16 ofstream outfile("stud.dat", ios::binary);
17 if(!outfile)
18 {
19 cerr << "open error!" << endl;
20 abort();//退出程序
21 }
22 for(int i = 0; i < 3; i++)
23 {
24 outfile.write((char*)&stud[i], sizeof(stud[i]));
25 }
26 outfile.close();
27 return 0;
28 }
用记事本打开,显示乱码,如下所示:
用16进制格式打开,如下所示:
从上图中可以看出,给结构体分配的空间是4的倍数。
当把结构体修改一下:
1 struct student
2 {
3 char name[15];
4 char sex;
5 int num;
6 int age;
7 };
结构体分配的空间如下图所示: