【C 语言】文件操作 ( fseek 函数 )

【C 语言】文件操作 ( fseek 函数 )一 fseek 函数 二 fseek 函数代码示例

一、fseek 函数


FILE 文件结构中 , 存在一个指针 , 每次调用文件的读写函数 , 该指针就会移动 ;

fgets / fputs , getc / putc , fscanf / fprintf , fread / fwrite 等函数 ;

默认情况下 , 指针是从前向后移动的 ;

该文件内部的指针指向的位置可以通过 fseek 函数进行改变 ;

fseek 函数原型如下 : 重新设置文件内部指针的位置 ;

#include  
            int fseek(FILE *stream, long offset, int fromwhere); 

设置的指针的位置是 起始位置 + 偏移量 ;

其中的 int fromwhere 参数就是 起始位置 , 有以下三种选择 :

  • 文件头 SEEK_SET 0
  • 当前位置 SEEK_CUR 1
  • 文件尾 SEEK_END 2

long offset 偏移量参数 , 可以为正数 , 也可以为负数 ;

如果执行成功 , 则返回 0 , 失败返回非 0 , 并设置 error 错误代码 ;

二、fseek 函数代码示例


fseek 函数代码示例 : 先写出 10 字节数据 , 然后正常读取前 2 字节 , 最后跳过 4 字节 再读取 2 字节 ;

#include  
                  int main() { 
                 // 以写文本的方式向文件中写出数据 FILE *p = fopen("D:/File/number.dat", "w"); // 写出 10 个字符 char array[10] = { 
                1,2,3,4,5,6,7,8,9,10}; // 将 10 个字符写出到文件中 fwrite(array, 1, sizeof(array), p); // 关闭文件 fclose(p); // 正常读取文件前 2 字节 FILE *p1 = fopen("D:/File/number.dat", "r"); // 读取数据缓冲区 char array1[2]; // 读取前 2 字节 fread(array1, 1, sizeof(array1), p1); // 打印前 2 字节数据 printf("%d , %d\n", array1[0], array1[1]); // 跳过 4 字节读取文件 2 字节 FILE *p2 = fopen("D:/File/number.dat", "r"); // 读取数据缓冲区 char array2[2]; // 跳过 4 字节 , 此时当前位置是 0 fseek(p2, 4, SEEK_CUR); // 读取 2 字节 fread(array2, 1, sizeof(array2), p2); // 打印前 2 字节数据 printf("%d , %d", array2[0], array2[1]); return 0; } 

执行结果 :

在这里插入图片描述
























版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221975.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午4:51
下一篇 2026年3月17日 下午4:51


相关推荐

  • tensorflow pycharm教程_tensorflow支持python3.8吗

    tensorflow pycharm教程_tensorflow支持python3.8吗pycharm使用tensorflow流程最近在学人工智能与大数据管理,环境是python+tensorflow。但配置有些麻烦,记录一下。其实主要分为两个部分,配置tnsorflow和在pycharm中使用tensorflow。首次尝试平常安装python包都是去pycharm的setting里面,在设置ProjectInterpreter中点小加号去装的,但这次却报了错。想来应该是有些…

    2022年8月25日
    6
  • 神经网络为什么要归一化

    神经网络为什么要归一化用神经网络的小伙伴都知道,数据需要做归一化,但是为什么要做归一化,这个问题一直模梭两可,网上也没有较全的回答,小编花费了一段时间,作了一些研究,给大家仔细分析分析,为什么要做归一化:1.数值问题。无容置疑,归一化的确可以避免一些不必要的数值问题。输入变量的数量级未致于会引起数值问题吧,但其实要引起也并不是那么困难。因为tansig的非线性区间大约在[-1.7,1.7]。

    2022年6月23日
    33
  • Vue 全家桶介绍

    Vue 全家桶介绍Vue 全家桶介绍 Vue 有著名的全家桶系列 包含了 vue router http router vuejs org vuex http vuex vuejs org vue resource https github com pagekit vue resource 再加上构建工具 vue cli sass 样式 就是一个完整的 vue 项目的核心构成 概括起来就是

    2026年3月26日
    2
  • tp框架中assign同时传递多个值,输出多个模板变量

    tp框架中assign同时传递多个值,输出多个模板变量

    2021年10月9日
    53
  • PL/SQL Developer使用技巧

    PL/SQL Developer使用技巧

    2021年5月7日
    324
  • 【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信

    【VC++技术杂谈005】如何与程控仪器通过GPIB接口进行通信在工控测试系统中 经常需要使用到各类程控仪器 这些程控仪器通常具有 GPIB LAN USB 等硬件接口 计算机通过这些接口能够与其通信 从而实现自动测量 数据采集 数据分析和数据处理等操作 本文主要介绍如何与程控仪器通过 GPIB 接口进行通信 nbsp 1 GPIB 简介 GPIB 是通用总线 General nbsp Purpose nbsp Interface nbsp Bus 的简称 GPIB 一共由

    2026年3月18日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号