C++对象数组的读写

最大的收获:对象数组的读写

以前对数组对象的读写总是崩溃,或者乱码,今天听老师讲了C++文件读写后,特意做点博客
记录下来,今天收获最大的就是对象数组的读写了

#include <iostream>
#include <bits/stdc++.h>//万能头文件,不想费劲地包含头文件
using namespace std;
struct T{
    int data;
    char a[10];//对象读写时,如果成员有string,一定要换成char[]或者new char[],否则程序容易崩溃!!
    T():data(0),a("null"){

    }
    T(int _data,const char* des):data(_data){
        std::strcpy(a,des);//把字符常量拷贝到数组里面
    }
    friend ostream& operator<<(ostream& os,const T& o){//重载一下“<<”
        cout << "当前对象的值:" << o.data << "\t描述:" << o.a << endl;
        return os;
    }
};
int main()
{
    {
        ofstream out("C:\\Users\\axin\\Desktop\\a.data",ios::out);//"w"的方式打开文件,如果没有会创建新的文件

        T t[3]={T(10,"123"),T(11,"456"),T(12,"789")};

        for(int i=0;i<3;i++)//按块的方式把对象写到文件里面
            out.write(reinterpret_cast<char*>(&t[i]), sizeof(T));//第一个参数必须强转为char*,第二个参数提供读取一个对象的字节数,字节数对了才能保证数据正确读写
    }

    T t[3];//先用默认初始化data为0,字符数组内容置为"null"

    ifstream in("C:\\Users\\axin\\Desktop\\a.data",ios::in);//"r"方式读取

    for(int i = 0 ; i < 3 && !in.eof() ; i++)
    {
        in.read(reinterpret_cast<char*>(&t[i]) , sizeof(T));//
        cout << t[i];//边读边输出,内容正常,说明正常读取到内容了
    }
    return 0;
}

下面的内容基本都是照抄的了,供自己复习期末考的😀

课堂笔记

文本文件和二进制文件的区别
C++文件默认的输出是文本方式

文本文件是把字符转换成ASCII码存储

二进制文件是把字符转换成为01等二进制数来存储

read和write函数是按块进行读写的函数,编程方便,但是要注意的一点是:如果你把一个含有string成员的对象写入到文件中,就会导致程序崩溃,因此建议把string换成char[]存字符

ofstream out_1;//默认构造函数,打开文件需要用open函数,默认就是w方式写文件
ofstream out_2("D:\\a.txt");//含路径的构造函数,默认第二个参数是w方式写文件
ofstream out_3("D:\\b.txt",ios::out);//含路径的构造函数,显式指定w方式写文件

if(out_3){//成功打开可以返回true

}
out_1.close();//记得关闭文件
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿维的博客日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值