比如说struct course { char cname[10]; int cscore; };struct student { char name[10]; char num[10]; char zhy[20]; char bj[10]; int counum; course cou[20]; }; student stu[500];这个结构体数组该怎么在二进制文件中写入读取呢?能不能再详细点啊,要不来段代码吧,怎么读出显示
#include <fstream> using namespace std;…// AuthInfo 是自定义的 struct struct AuthInfo auth_info; string susername, spassword;/* 写文件 */ // 清零 ZeroMemory ( &auth_info, sizeof ( auth_info ) );susername = "tanggaowei@gmail.com"; spassword = "000000";// 内存拷贝 memcpy(auth_info.username, susername.c_str(), susername.length()); memcpy(auth_info.password, spassword.c_str(), spassword.length());// 定义打开输出流 ofstream fout("mbc.dat", ios::binary);// 写入 fout.write((char *)(&auth_info), sizeof(auth_info));// 关闭输出流 fout.close();/* 读文件 */ ZeroMemory ( &auth_info, sizeof ( auth_info ) );ifstream fin ( "mbc.dat", ios::binary );fin.read((char *)(&auth_info), sizeof(auth_info));susername = auth_info.username; spassword = auth_info.password;ZeroMemory ( auth_info.username, 100 ); // AuthInfo.username[100] ZeroMemory ( auth_info.password, 50 ); // AuthInfo.password[50]memcpy(auth_info.username, susername.c_str(), susername.length()); memcpy(auth_info.password, spassword.c_str(), spassword.length()); fin.close();
string类对象是用指针来实现数据存储的,因此,单纯保存类对象,是无法保存相应的数据的,因此,无法用二进制方式进行数据保存!不然,保存在文件中的只是内存地址,而有效数据,在下次运行程序时就找不到了。解决办法只能是通过文本方式,将string内容(即,真实的数据)保存到文本中才可以。
1.看来你是希望使用文件流#include<fstream.h>or#include<fstream>using namespace std;fstream file("filename.dat",ios::in|ios::out|ios::binary);//以二进制的读写方式打开文件如果是读就要用file.read(buf,size);如果是写就用file.write(buf,size);当然这里的size可以是sizeof(struct student);buf自然是结构的起始地址用过之后文件需要关闭file.close();