关于文件的操作

简介: 关于文件的操作

1.文件操作

FILE* fp = fopen("config.txt", "r");
    if (!fp)
    {
        printf("文件打开失败\n");
    }
    else
    {
        char LineBuf[1024];
        while (!feof(fp))
        {
            LineBuf[0] = 0;
            if (fgets(LineBuf, sizeof(LineBuf) - 1, fp) == NULL)
            {
                continue;
            }if (LineBuf[0] == '\0')
            {
                continue;
            }
        lblprocstring:
            if (strlen(LineBuf) > 0)
            {
                if (LineBuf[strlen(LineBuf) - 1] == 10 || LineBuf[strlen(LineBuf) - 1] == 13) {
                    LineBuf[strlen(LineBuf) - 1] = 0;
                    goto lblprocstring;
                }
            }
            if (strlen(LineBuf) <= 0)
            {
                continue;
            }
            printf("%s\n", LineBuf);
        }
        fclose(fp);
    }

2.保存到文件中的结构体,字节对齐

对于要保存到文件中的结构体,结构体成员中不要出现指针类型成员变量,因为它所指向的内存地址很可能失效,一旦引用了失效的地址会导致程序运行崩溃

struct stu {
    char name[30];
    int age;
    double score;
};

字节对齐这个问题和编译器有关,像这个结构体,有30+4+8=42个字节,但是在window上用VS的话你看他长度的话是48字节,因为window自动搞成8的整数倍,linux用gcc则是4的整数倍,你再linux上看他是44字节

如果把 这个结构体写入一个文件中,那在window生成后是48字节,再去linux打开时读出来是44字节,显然读出来的数据肯定出错,解决的办法是,定义结构体之前就用”#pragma pack(1)”设置结构体对齐方式是1字节对齐,按1字节对齐的意思就是告诉编译器不要去对齐,实际是多少字节就是多少字节,如果想要恢复默认的字节对齐方式,在定义结构体之后,可以使用”#pragma pack()”取消刚才的设置的对齐,这样不管是什么操作系统,读这个结构体都是42字节

修改后就是这样子

#pragma pack(1)
struct stu {
    char name[30];
    int age;
    double score;
};
#pragma pack()
相关文章
|
IDE Linux 开发工具
从旧服务器迁移svn到另一台新服务器中(linux系统)|遇到诸多坑,已解决
从旧服务器迁移svn到另一台新服务器中(linux系统)|遇到诸多坑,已解决
|
JavaScript
VUE~富文本简单使用~tinymce
VUE~富文本简单使用~tinymce
1316 0
VUE~富文本简单使用~tinymce
|
机器学习/深度学习 人工智能 自然语言处理
AIGC技术深度解析:生成式AI的革命性突破与产业应用实战
蒋星熠Jaxonic,AI技术探索者,深耕生成式AI领域。本文系统解析AIGC核心技术,涵盖Transformer架构、主流模型对比与实战应用,分享文本生成、图像创作等场景的实践经验,展望技术趋势与产业前景,助力开发者构建完整认知体系,共赴AI原生时代。
1932 2
配置BGP路由反射器
本文介绍了一种在7台设备中组建IBGP网络的方案,其中AR2、AR4和AR5已建立BGP全连接。为满足不破坏现有全连接关系并简化配置管理的需求,采用路由反射器技术。具体思路是:将AR2配置为Cluster1的路由反射器,AR4和AR5作为其客户机;AR3配置为Cluster2的路由反射器,AR6和AR7作为其客户机。通过禁止客户机间通信,确保原有全连接关系不变,并实现网络优化。文中详细提供了IP地址与BGP配置步骤,以及最终验证结果。
配置BGP路由反射器
|
算法
二分查找法的时间复杂度
【10月更文挑战第9天】
1675 57
|
人工智能 算法 前端开发
首个 AI 编程认证课程上线!阿里云 AI Clouder 认证:基于通义灵码实现高效 AI 编码
为了帮助企业和开发者更好使用通义灵码,阿里云上线了“AI Clouder 认证课程--基于通义灵码实现高效 AI 编码”。本课程汇聚了后端、前端、算法领域 5 名实战派专家,带你体验 4 大研发场景实践,上手 3 大实操演练,深度掌握智能编码助手通义灵码,实现全栈 AI 编码技能跃升。
|
存储 缓存 网络协议
阿里云服务器实例选择:c7/g7/r7和c8i/g8i/r8i及c8y/g8y/r8y实例对比与选择参考
本文将重点介绍阿里云服务器七代云服务器实例(计算型c7、通用型g7、内存型r7)、八代云服务器实例(计算型c8i、通用型g8i、内存型r8i)以及倚天云服务器实例(计算型c8y、通用型g8y、内存型r8y)的主要性能、适用场景及选择参考,帮助用户根据自己的需求选择合适的云服务器实例。
1369 10
|
关系型数据库 PostgreSQL
postgresql将没有关联关系的两张表合并成一张
【5月更文挑战第4天】postgresql将没有关联关系的两张表合并成一张
756 5

热门文章

最新文章