【问题标题】:C how to pass pointer to location in file for readingC如何将指针传递到文件中的位置以进行读取
【发布时间】:2018-05-03 16:43:07
【问题描述】:

如果有给定的文件 例如:

abc def ghijk

并希望将文件的指针传递给函数 ex:

void myfunc(FILE * myfile)

如何让文件中的指针不指向第一个字符(在本例中为 a),而是指向两个空格后的第一个字符(在本例中为 g)?比如身份证通行证:

myfunc(myfile.charat(9)) //or something

然后在 myfunc() 中,第一个 getc 调用将返回 'g'。

【问题讨论】:

  • 你知道打开文件前“两个空格后的第一个字符”的位置吗?如果你这样做,试试fseek()
  • 不,但是,我可以遍历文件一次,找到位置然后重新加载文件。所以对于所有密集的目的,是的。
  • @IncreasinglyIdiotic 或者更确切地说,“你怎么知道...”.. :)

标签: c file pointers


【解决方案1】:

我的建议是读取并丢弃字符,直到遇到两个空格字符。

为此编写一个函数:

void skipUntilTwoSpaces(FILE* in)
{
   int count = 2;
   int c;
   while ( count > 0 && (c = getc(in)) != EOF) )
   {
      if ( c == ' ')
      {
         --count;
      }
   }
}

并在代码中最有意义的地方使用它。

【讨论】:

  • 我相信这是更好的解决方案,因为它消除了我对 FILE 指向文件位置的内部指针的一些困惑。传递 FILE 时,文件位置值仍然是最新的,因此不需要 fseek 或 lseek。
【解决方案2】:

您正在寻找函数fseek()。随便写

fseek(myfile, 9, SEEK_SET);

在将myfile 传递给您的函数之前。您可能想检查返回值,以便知道设置位置是否成功。


顺便说一句,不要将“文件位置指示器”(有时称为“文件指针”)与“指向FILE 的指针”混淆。它们是不同的东西。文件位置指示符存储在FILE 内部的某个位置(或者,更有可能存储在与FILE 关联的某些操作系统对象中),以了解接下来要读取或写入文件中的哪个位置。另一方面,FILE * 是您的(stdio-internal)FILE 结构的内存位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多