微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法使用C中的fgetc转到文件的开头和指定的索引?

如何解决有没有办法使用C中的fgetc转到文件的开头和指定的索引?

对于我的算法,我想在将文件中的所有字符返回到特定索引char后回溯。例如,我有一个带有ABCDEF文件,我想按先后顺序依次访问ABCDEF然后BCDEF然后CDEF,依此类推。有没有办法我可以仅使用fgetc而没有字符串缓冲区呢?

  FILE *file = fopen("temp.txt","r");
  int c;  
  while (1) {
    c = fgetc(file);
    if (feof(file)) {
      break;
    }
  // Access and print char
  }

解决方法

您可能想要比这更干净地处理极端情况和错误,但是...:

#include <stdio.h>
#include <stdlib.h>

FILE *
xfopen(const char *path,const char *mode)
{
        FILE *fp = path[0] != '-' || path[1] != '\0' ? fopen(path,mode) :
                *mode == 'r' ? stdin : stdout;
        if( fp == NULL ) {
                perror(path);
                exit(EXIT_FAILURE);
        }
        return fp;
}

int
main(int argc,char **argv)
{
        int c;
        long offset = 0;
        FILE *ifp = argc > 1 ? xfopen(argv[1],"r") : stdin;

        while( fseek(ifp,offset++,SEEK_SET) == 0 ) {
                while( (c = fgetc(ifp)) != EOF ) {
                        putchar(c);
                }
                if( ferror(ifp) ) {
                        return EXIT_FAILURE;
                }
                if( offset == ftell(ifp) ) {
                        break;
                }
        }
        return EXIT_SUCCESS;
}

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