C语言:文件操作(三)

news2024/11/29 8:59:39

目录

前言

5、文章的随机读写

5.1 fseek

5.2 ftell

5.3 rewind

结语


前言

        本篇文章继续讲解文件操作,讲解文件的随机读写,主要有三个函数:fseek;ftell;rewind。

        前面讲解的函数都是对文件内容进行顺序读写,例如:一个文件中存放着“abcd”字符,首先用fgetc读出的是a的地址,再用一次fgetc读出的就是b的地址,以此类推,它都是按着顺序去读的。如果我们想要按照自己的想法去读写文件的话,就要用到文件随机读写的函数。

5、文章的随机读写

5.1 fseek

        fseek是根据文件指针位置和偏移量来定位新的指针位置的函数。它有三个参数,第一个是要操作文件的文件指针,第二个是偏移量,第三个参数是当前文件指针的位置。

        第三个参数具体讲一下,它有三个取值:

        第一个SEEK_SET表示文件的起始位置;第二个SEEK_CUR表示当前文件指针的位置;第三个SEEK_END表示文件的末尾位置。

        举个例子:

#include<stdio.h>


int main()
{
	FILE* pf = fopen("test.txt", "w");
	while (NULL == pf)
	{
		perror("");
		return 1;
	}

	fprintf(pf, "%s", "abcdef");

	fclose(pf);
	pf = NULL;

	pf = fopen("test.txt", "r");
	while (NULL == pf)
	{
		perror("");
		return 1;
	}
	//定位文件位置
	fseek(pf, 2, SEEK_SET);
	int ch = fgetc(pf);
	printf("%c\n", ch);

	fseek(pf, 2, SEEK_CUR);
	ch = fgetc(pf);
	printf("%c\n", ch);
	
	fclose(pf);
	pf = NULL;
	return 0;
}

        此代码前面先创建了一个文件"test.txt",放入"abcdef",然后通过fseek去定位我们想要的内容进行输出,可以看到,第一次用fseek的时候,是将pf定位起始位置向右两个偏移量的位置,所以第一次输出为c,此次调用后,由于fgetc特性,pf将指向文件第三个字符的位置,也就是d。下一次我们调用fseek用的是"SEEK_CUR",是将pf定位到它原本位置后两个偏移量的位置,因此输出为"f"。

        看效果:

        fseek的用法就是如此,我们可以通过fseek去访问我们想要的位置的内容。

5.2 ftell

        ftell函数是用来测量文件指针距离文件起始位置的偏移量的,这个很好理解。它的参数就是文件指针。

        假如有一个文件的内容是"abcdef",我用一个文件指针 pf 指向"c"的话,我们调用ftell(pf),得到的结果就是2,因为c在这个文件里离起始位置的偏移量是2。

        这个函数的作用就是在我们不清楚目前文件指针的偏移量的时候,可以调用它来确定,从而更加精确地去操作文件。

5.3 rewind

        这个函数地作用就是让指针的位置回到文件起始位置。它的参数就是文件指针。

结语

        关于文章的随机读写,就讲到这,希望对你有所帮助,接下来还会讲解文本和二进制文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1599011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32CubeMx下载安装环境搭建及工程创建

一、stm32介绍 STM32F103C8T6是一款由意法半导体公司&#xff08;ST&#xff09;推出的基于Cortex-M3内核的32位微控制器&#xff0c;硬件采用LQFP48封装&#xff0c;属于ST公司微控制器中的STM32系列。除了被我们熟知的STM32&#xff0c;ST公司还有SPC5X系列、STM8系列等&…

【C++类和对象】类和对象的引入

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

微信运动接口(获取自己的微信运动数据)

var pc new WXBizDataCrypt(appid, session_key); 这段代码是使用微信官方提供的 WXBizDataCrypt 类来解密微信运动数据。WXBizDataCrypt 是一个用于解密微信开放平台返回的加密数据的类&#xff0c;它需要传入两个参数&#xff1a;appid 和 session_key。其中&#xff0c;ap…

如何重置root用户的密码

即进入Linux操作系统的救援模式去重置密码。 1.首先重启机器&#xff0c; 2.进入grup菜单&#xff0c;按上下键盘&#xff0c;让系统的启动停在这个界面&#xff0c; 3.选择这个grup菜单的第一项&#xff0c;可以看界面下面的提示&#xff0c;按字母e编辑这个系统的启动配置…

STL —— stack、queue

博主首页&#xff1a; 有趣的中国人 专栏首页&#xff1a; C专栏 目录 1. 容器适配器 2. 栈的模拟实现 3. 队列的模拟实现 4. 双端队列deque 4.1 deque的原理介绍 4.2 deque的缺陷 4.3 为什么选择deque作为stack和queue的底层默认容器 本篇文章主要讲解 stack 和 queue …

基于SpringBoot的“银行OA系统的设计与实现”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“银行OA系统的设计与实现”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 用户登录界面 管理员主界面 员工基本档…

【C++从练气到飞升】07---内存管理

&#x1f388;个人主页&#xff1a;库库的里昂 ✨收录专栏&#xff1a;C从练气到飞升 &#x1f389;鸟欲高飞先振翅&#xff0c;人求上进先读书。 目录 一、 C/C内存分布 二、 C语言中动态内存管理方式 三、 C中动态内存管理 1. new/delete操作内置类型 2. new和delete操作…

Composer是什么?

Composer是PHP的一个依赖管理工具&#xff0c;它允许开发者声明项目所依赖的代码库&#xff0c;并在项目中自动安装这些依赖。它使用composer.json文件来定义项目的依赖关系&#xff0c;并使用composer.lock文件来锁定依赖的版本&#xff0c;以确保项目的稳定性和可重复性。 Co…

流媒体服务器的应用场景

流媒体服务器的应用场景 流媒体常用协议 RTSP 不适合手机和浏览器端 RTMP 比较适合手机和浏览器端直播 HLS 延迟比较高&#xff0c;适合点播

mysql奇葩问题union

单独执行第一条&#xff0c;有三条结果&#xff1b; union之后&#xff0c;只有一条结果&#xff1b; union自动的把重复数据合并了&#xff1b;

Nacos源码分析,Nacos gRPC服务端通信渠道是如何启动的?

作为SpringCloudAlibaba微服务架构实战派上下册和RocketMQ消息中间件实战派上下册的作者胡弦&#xff0c;我来给大家带来Nacos源码分析的技术文章。 Nacos默认会启动两个gRPC服务端通信渠道&#xff0c;一个用于Nacos集群节点之间的交互&#xff08;GrpcClusterServer&#xf…

大数据建模理论

文章目录 一、数仓概述1、数据仓库概念1.1 概述1.2 数据仓库与数据库的区别1.3 技术选型和架构 2、数仓常见名词2.1 实体2.2 维度2.3 度量2.4 粒度2.5 口径2.6 指标2.7 标签2.8 自然键/持久键/代理键2.9 退化维度2.10 下钻/上卷2.11 数据集市 3、数仓名词之间关系3.1 实体表&am…

每日一练

这题我主要用的思想是:动态规划 1.状态表示&#xff1a;以i位置为结尾的字符串是否可以用字典表示&#xff0c;然后就可以拆分成 j ~ i 为字典中的最后一个单词&#xff0c;此时 0 < j < i (1.有可能全部为字典的一个单词&#xff0c;2.有可能只有一个字母的单词)&#x…

【SpringBoot】返回参数

返回参数 返回页面返回数据返回 html 代码返回 json 数据两数相加用户登录 返回页面 首先在 static 文件夹中创建 index.html 文件&#xff1a; 代码&#xff1a; <html> <body><h1>hello word!!!</h1><p>this is a html page</p> <…

[C++初阶]类和对象(一)

1.面向过程和面向对象的区分 我们之前都是用C语言写的代码,我们知道C语言是一个面向过程的语言,但是现在我们学的时C,我们都知道C是一种面向对象的语言,那么什么叫面向过程?什么叫面向对象呢? 这里我们来举个例子: 比如我们是开饭店的&#xff0c;客人点了一道菜&#xff0c…

Clustering and Projected Clustering with Adaptive Neighbors 论文阅读

1 Abstract 许多聚类方法基于输入数据的相似性矩阵对数据组进行划分。因此&#xff0c;聚类结果高度依赖于数据相似性学习。由于相似性度量和数据聚类通常是分两步进行的&#xff0c;学习到的数据相似性可能不是数据聚类的最佳选择&#xff0c;从而导致次优结果。在本文中&…

2024 MathorCupB 题 甲骨文智能识别中原始拓片单字自动分割与识别研究

一、问题重述 甲骨文是我国目前已知的最早成熟的文字系统&#xff0c;它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值&#xff0c;不仅对中国文明的起源具有重要意义&#xff0c;也对世界文明的研究有着深远影响。在我国政府的大力推动下&#xff0c;甲骨…

格雷希尔G80L-T系列大口径快速连接器,在汽车膨胀水箱的气密性测试密封方案

副水箱也有人称作膨胀水箱&#xff0c;是汽车散热系统的一个重要组成部分&#xff0c;当水箱里面的温度过高的时候就会产生一定的压力&#xff0c;而副水箱可以根据热胀冷缩来帮助水箱和发动机排出去多余的水&#xff0c;起到一个调节的作用&#xff0c;副水箱由PP/PE塑料注塑而…

49.字母异位词分组(哈希字典)

《代码随想录》学习笔记&#xff0c;原链接&#xff1a;代码随想录 class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:hash_table {} # 构建哈希字典result []for i in range(len(strs)): # 遍历字符串列表key "".join(s…

【攻防世界】ics-07

<?php session_start();if (!isset($_GET[page])) {show_source(__FILE__);die(); }if (isset($_GET[page]) && $_GET[page] ! index.php) {include(flag.php); }else {header(Location: ?pageflag.php); } <?phpif ($_SESSION[admin]) {$con $_POST[con];$…