首页
学习
活动
专区
圈层
工具
发布

【C语言】fseek、ftell以及rewind函数(随机文件读写)

前言 在之前,我讲过文件的顺序读写。但是我们可不可以随机读写文件呢?答案是当然可以的,只要我们合理的控制文件指针的位置(光标),就能够读取到我们想要读取的数据。...C语言给我们提供了随机读写文件的函数,只要我们能够合理的运用它们,就能够实现我们要达到的效果。 那么,今天我们就来一起探讨一下随机文件读取函数!!!...一般来说,我们打开一个文本文件,文件的光标位置都会处在文件内容最开始的位置,也就是如下的样子: 那我们运用fseek函数,就能够按照我们的意愿随意改变光标出现的位置,然后在开始读取文件的内容。...形参名 作用 steam 文件指针变量 offset 光标的偏移量 origin 设置光标的起始位置 看到offset这个变量名时,不知道大家有没有想起,我在结构体内存对齐的那边文章中用了一个offsetof...那对于origin变量,C编译器给我们提供了3个宏,它们分别是: 宏 作用 SEEK_SET 将光标重置到文件开头的位置 (比较常用) SEEK_CUR 将光标重置到当前文件内容的最末尾位置 (比较常用

58010

征服 C 语言文件 IO:透视数据流、FILE* 核心机制与高效实践全指南

随机读写:你可以控制光标的位置: fseek:让你任意跳转到文件中的某个位置。 ftell:告诉你当前光标在哪里(相对于文件开头有多少字节偏移量)。 rewind:把光标一键重置回文件开头。...7.1.2 fputs、fgets 1. fputs:文本行输出(写入) fputs 是 C 语言中用于将字符串写入到文件流的函数。...2. fgets:文本行输入(读取) fgets 是 C 语言中用于从文件流中读取一行文本的函数。它将读取的字符串存储到指定的缓冲区 str 中。...fprintf 是 C 语言中负责格式化输出(写入)的函数,其本质功能与 printf 相同,但它通过在函数原型中增加一个 FILE * stream 参数,获得了将格式化数据流向任何指定流(包括磁盘文件...它能够从指定的文件流中读取数据,并根据格式控制符进行匹配和解析,将结果存储到对应的变量地址处,返回成功读取并赋值的项数,是读取结构化文件数据和进行复杂文本解析的强大工具。

19510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C语言加油站】C语言文件随机读写完全指南:fseek、ftell、rewind等五大函数深度解析

    然而,在实际编程中,我们常常需要更灵活的文件操作方式。今天,我们将进入文件操作的另一个重要领域——随机读写,学习如何精准控制文件中的读写位置。...origin 的参考值必须为 SEEK_SET ,即文件开头; 当函数在这些参考值之外调用其他值,是否支持还取决于特定的系统和库的实现。...("ch = %c\n", ch); fclose(pf); pf = NULL; } 我们此时的测试逻辑很简单: 文件在打开时,光标会位于文件开头 首先,我们通过 fgetc 读取数据来移动光标...下面我们就来对其测试一下: 可以看到,当我们使用 rewind 后,光标的位置就从我们最开始记录的 l 处重置为了文件开头 H 处。...那么在使用该函数前,我们先来认识一下这个新的类型: 该类型就是专门用于记录文件中的光标位置的类型,该类型的变量中存储的信息,通常是通过 fgetpos 函数进行填充,并且其变量中的信息不能直接读取,只能够在调用

    25210

    C语言入门系列之11.文件和文件操作

    在UNIX系统下,用缓冲文件系统来处理文本文件,用非缓冲文件系统来处理二进制文件。 ANSI C标准只采用缓冲文件系统来处理文本文件和二进制文件。 C语言中对文件的读写都是用库函数来实现。...三、文件的读写 对文件的读和写是最常用的文件操作,在C语言中提供了多种文件读写的函数,使用这些函数时都要包含头文件stdio.h。...fgetc()函数调用: ch = fgetc(fp); 函数功能: 其意义是从打开的文件fp中读取一个字符并传入ch中。 在fgetc函数调用中,读取的文件必须是以读或读写方式打开的。...在文件内部有一个位置指针,用来指向文件的当前读写字节。 在文件打开时,该指针总是指向文件的第一个字节; 使用fgetc函数后,该位置指针将向后移动一个字节。...,用相对于文件开头的位移量来表示。

    1.7K10

    C语言中的文件与文件操作入门

    在C语言中,文件操作是一个非常重要的部分,它允许程序与外部数据进行交互,如读取文本文件、写入数据到文件等。对于初学者来说,理解文件操作的基本概念以及如何使用C语言进行文件操作是十分必要的。...一、文件的基本概念 在C语言中,文件是一个存储在外部介质(如硬盘)上的数据集合,它可以包含文本、图像、音频等各种类型的数据。...示例: fclose(fp); 3. fgetc 和 fgets 函数 fgetc 函数用于从指定的文件中读取一个字符,而 fgets 函数用于从指定的文件中读取一行。...= NULL) { printf("%s", buffer); } 4. fputc 和 fputs 函数 fputc 函数用于将一个字符写入到指定的文件中,而 fputs...对于不同的文件操作需求,应选择合适的文件打开模式(如"r"表示只读,"w"表示写入,"a"表示追加等)。 通过上面的介绍和示例代码,相信初学者已经对C语言中的文件和文件操作有了一定的了解。

    50800

    从“文件小白“到“IO大侠“:C语言文件操作全攻略

    ⽂件中 fclose(pf); pf = NULL; return 0; } 在vs上打开二进制文件 四、文件的打开和关闭 1、文件的打开 函数原型: FILE *fopen( const...(有没有发现fputs函数的参数设计和fputc函数参数的设计非常类似)。...函数调用完会返回实际读取的元素个数,若在读取过程中发生错误或是在未读取到指定元素个数时读取到文件末尾,则返回一个小于count的数。...示例:跳转到文件第100字节处 fseek(fp, 100, SEEK_SET); // 从开头向后跳100字节 2) 获取位置 ftell() long ftell(FILE *stream);...对于二进制文件(如结构体数据),可以直接跳转到指定记录: struct Record { int id; char name[50]; }; // 读取第3条记录(每条记录占54字节

    40110

    收集飞花令碎片——【C语言】文件操作

    一、什么是文件 文件是计算机中用于存储数据的基本单位,可以理解为存储在计算机外部存储器(如硬盘、U盘等)上的数据集合 二、为什么需要文件操作?...文件操作就是让你的程序能和硬盘上的数据互动起来的关键 C 语言中,文件操作主要依赖于 stdio.h 头文件中的一系列函数,核心概念是文件指针(FILE *)和流(stream) 三、文件分类...文件名包含3部分:文件路径+文件名主干+文件后缀 例如: c:\code\test.txt 为了方便起见,文件标识常被称为文件名 五、文件是如何存储的? ⼀个数据在文件中是怎么存储的呢?...6.1)标准流 标准流是C语言标准库中预定义的、在程序启动时自动打开的流。...手动设置文件位置指示器的位置 int fseek(FILE *stream, long offset, int whence); 示例用途: 跳转到文件开头:fseek(fp, 0L, SEEK_SET

    16810

    emacs 代码导航

    代码导航globalglobal可以生成gtags,让emacs根据索引文件查找代码。配合helm-gtags使用更方便。需要首先在代码目录下执行gtags生成索引文件。然后才能查找。...跳转到光标所在处定义xref-find-definitions M-.查找光标所在处的引用lsp-find-references M-r跳转之后返回xref-go-back M-,buffer内查找函数和变量...仅限于本buffer中用imenu的方式临时标记一个位置C-SPC,移动到其他位置之后也可以用C-u C-SPC跳回来。如果标记多个,可以倒叙返回。...光标所在当前的thing(不管是否在开头)比C-s稍快,而且是基于语法的变量isearch-forward-thing-at-point M-s M-....光标所在当前的thing(不管是否在开头)比C-s稍快 比上面多一个M快捷键symbol-overlay M-i 高亮函数范围内的符号。锁定。可以取消。可以高亮多个。

    49200

    C语言范例学习06-上

    第六章 文件操作 前言:第五章是C语言在数学上的一些应用,我觉得没有必要,便跳过了。这章正如我标题所写的,是C语言在文件上的操作。...fgetc函数:    ch=fgetc(fp)    该函数作用是从指定的文件(fp指向的文件)读入一个字符赋给ch。注意该文件必须是以读或读写方式打开。...其实,说到这里,大家基本就有了问题的思路了。通过fopen函数打开目标文件,将其内存地址赋给fp。再利用循环结构。通过fgetc函数将文件内字符依次赋给ch,显示在屏幕上。...ch = fgetc(fp2); 33 } 34 fseek(fp2, 0L, 0); /*将文件2中的位置指针移到文件开始处...回想一下这篇文章开头,我们提到的文件操作本质。当我们第二个循环执行后,其fp2指向的并不是我们需要的文档开头,这中间我们也没有执行某个代码,使得fp2指向文档开头。

    21610

    【编译原理】词法分析:CC++实现

    / 从指定的文件流中读取一个字符 while (cbuffer !...1.在主函数main()中,首先打开名为example2.c的文件,并进行判断,如果文件打开失败,输出错误信息;否则,开始进行词法分析。...在处理算术运算符之前,还会检查是否是注释(以//开头的注释),如果是注释,则将注释内容读取并输出注释的词法单元。...13.在处理分隔符和其他符号时,otherprocess函数会根据字符的类型输出相应的词法单元。 14.在循环结束后,关闭文件,并输出词法分析结束的提示信息。...该代码的主要功能是打开文件 "example2.c",逐个读取文件中的字符,并根据字符的类型进行不同的处理,包括处理空格、制表符、换行符,处理标识符和关键字,处理常数,处理关系运算符,处理算术运算符,处理分隔符和其他符号

    2.9K10

    C语言读写程序文件-学习三十二

    顺序读写数据文件在顺序写时,先写入的数据存放在文件中前面,后写入的数据存放在文件中后面。在顺序读时,先读文件中前面的数据,后读文件中后面的数据。...,&i,&f);用fprintf和fscanf对磁盘文件读写,使用方便,容易理解,但是由于在输入时要将ASCII码转换为二进制形式,在输出时又要将二进制形式转换符,花费时间比较多。...随机读写可以在任何位置读取和写入数据文件位置标记的定位将文件的指针指向文件的开头,进行文件操作rewind函数函数原型:void rewind(FILE *fp);功能:重置文件位置指针到文件开头。...,2); // 从文件末尾处向后退10个字节----------ftell函数由于文件中的文件位置标记经常移动,人们往往不容易知道其当前位置,所以常用ftell函数得到当前位置(相对于文件开头的位移量来表示...,使文件指针fp和相应的文件建立了联系,通过fclose函数将切断fp和文件的联系;如果以一次一个字符的方式处理文件,需要用 fgetc 或者 fputc 函数;如果以一次一行的方式处理文件,可以用 fgets

    1.3K40

    文件操作

    缓冲区 在进行文件操作的时候,为了提高存取效率,程序在执行是会提供额外的内存暂时存放数据,这块内存就是缓冲区 例如写入文件时: 1FILE*fWrite; 2if (!...用这个是为了区分转义字符 相对路径 相对路径是相对于工作空间而言的,在windows和Linux下 ../ 表示上级目录 ./ 表示当前目录 1fWrite = fopen("....30 char ch = fgetc(fRead); 31 putchar(ch); 32 33 rewind(fRead); //将文件内部指针移回文件开头 34 //循环读取字符...} 在Linux下看到的效果更明显: 1ubuntu@ubuntu:~/work$ ls 2main.c 3ubuntu@ubuntu:~/work$ gcc main.c -o main.exe...rewind 使文件位置标志重新返回文件的开头 1rewind(fRead); //相当于你接下来读取的位置为fRead指向文件的开头位置 fseek 1int fseek( 2 FILE *stream

    1.2K40

    【C语言基础】:文件操作详解(后篇)

    C语言基础】:文件操作详解(前篇:准备知识) 一、文件的顺序读写 1.1 顺序函数读写函数介绍 1.2 fgetc函数和fputc函数 fputc函数原型: int fputc ( int character...如果发生读错误,该函数返回EOF并设置流的错误指示器(error)。 fgetc和fgetc是等价的,除了getc可以在某些库中作为宏实现。...在format形参之后,函数期望至少与format指定的一样多的附加参数。 参数说明如下: stream:指向文件的指针,它指定了数据将要被写入的文件。...,每个元素的大小为size字节,并将它们存储在ptr指定的内存块中。...因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件。 如果不做,可能导致读写文件的问题。

    40510

    【专业技术】C语言EOF如何使用?

    比如,下面这段代码就表示,如果不是文件结尾,就把文件的内容复制到屏幕上。   int c;   while ((c = fgetc(fp)) !...= EOF) {     putchar (c);   } 很自然地,我就以为,每个文件的结尾处,有一个叫做EOF的特殊字符,读取到这个字符,操作系统就认为文件结束了。...至于系统怎么知道文件的结尾,资料上说是通过比较文件的长度。 所以,处理文件可以写成下面这样:   int c;   while ((c = fgetc(fp)) !...fgetc()读取文件的最后一个字符以后,C语言的feof()函数依然返回0,表明没有到达文件结尾;只有当fgetc()向后再读取一个字符(即越过最后一个字符),feof()才会返回一个非零值,表示到达文件结尾...Linux中,在新的一行的开头,按下Ctrl-D,就代表EOF(如果在一行的中间按下Ctrl-D,则表示输出"标准输入"的缓存区,所以这时必须按两次Ctrl-D);Windows中,Ctrl-Z表示EOF

    2.7K80

    研究生的一份试题的几道题节选

    ,要求使用c语言工具把这二个文件中的信息合并(按照字母顺序排列),输出到一个新文件C中。...思路是读取二个文件的字符串,把它们放入字符数组中,在排序,在写入文件 题目思路不难,但是细节太多,我是c从入门到放弃,对c中好多函数不熟悉,对c的文件操作也不怎么熟悉,一边查询资料,一边写。...其中主要FILE 的指针,会移动的,在进行相关操作时候,一定要用 rewind()函数,使文件的位置指针回到开头,我在这里花了不少时间,隐形的不过,只要一步一步测试,才发现问题出在这里。...fgetc(fp);从指定的一个文件读入一个字符,如果遇到文件结束符则返回符EOF(值为-1)。...可以定义一个文件指针 FILE *fp,当你打开一个文件时,文件指针指向开头,你要指到多少个字节,只要控制偏移量就好,例如, 相对当前位置往后移动一个字节:fseek(fp,1,SEEK_CUR); 中间的值就是偏移量

    65280

    C语言——文件操作

    “a+”(读写) 打开一个文件,在文件尾进行读写 建立一个新的文件 “rb+”(读写) 为了读和写打开一个二进制文件 出错 “wb+”(读写) 为了读和写,新建一个新的二进制文件 建立一个新的文件 “...sprintf:将格式化的数据转换成字符串 1. fgetc fgetc()函数是C语言标准库中的一个函数,用于从指定的文件流中读取一个字符 int fgetc(FILE *stream); 其中...char *fgets(char * 4.fputs fputs是C语言中的一个函数,用于将一个字符串写入到指定的文件流中,将一个字符串输出到指定的文件中,通常用于向文件中写入数据。...10个字节处 fseek(fp, 10, SEEK_SET); // 读取文件指针当前位置的字符 char ch = fgetc(fp); printf("The character...pf = NULL; return 0; } 这里可以得出一个结论: 因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件。

    97410
    领券