随机访问:fseek()和ftell()函数(C语言学习笔记)

//倒序显示文件内容
#include <stdio.h>
#include <stdlib.h>
#define CNTL_Z '\032'
#define SLEN 81

int main(void) {
    char file[SLEN];
    char ch;
    FILE *fp;
    long count, last;

    puts("Enter the name of the file to be processed:");
    scanf("%80s", file);
    
    //检查文件是否打开成功
    if((fp = fopen(file,"rb")) == NULL)
    {                           //只读模式
        printf("reverse can`t open %s\n",file);
        exit(EXIT_FAILURE);
    }
	
    /*  fseek()的第一个参数是FILE指针,指向待查找的文件,fopen()应该已打开该文件。
    	fseek()的第二个参数是偏移量。该参数表示从起点开始要移动的距离。该参数必须是一个long类型的值,可以正--前移,负--后移,零--保持不动
    	fseek()的第三个参数是模式,该参数确定起始点。
    	如果一切正常,fseek()的返回值为0,否则返回值为-1。
    */
    fseek(fp, 0L, SEEK_END);        //定位到文件末尾
    
    //ftell()函数的返回类型是long类型,它返回的是参数指向文件的当前位置距文件开始处的字节数(定义在stdio.h中)
    last = ftell(fp);
    for (count = 1L; count < last; count++)
    {
        fseek(fp, -count, SEEK_END);
        ch = getc(fp);
        if (ch != CNTL_Z && ch != '\r')         // MS-DOS文件
            putchar(ch);
    }
    putchar('\n');
    fclose(fp);
    
    return 0;
}

该程序使用二进制模式,以便处理MS-DOS文本和UNIX文件。但是,在使用其他格式文本文件的环境中可能无法正常工作。

注意

如果通过命令行环境运行该程序,待处理文件要和可执行文件在同一目录(或文件中)。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值