C как передать указатель на местоположение в файле для чтения - PullRequest
0 голосов
/ 03 мая 2018

Если есть данный файл Пример:

abc def ghijk

И хотите передать указатель на файл в функцию ex:

void myfunc(FILE * myfile)

Как сделать так, чтобы указатель в файле указывал не на первый символ (в данном случае a), а вместо этого на первый символ после двух пробелов (в данном случае g)? Например, id pass:

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

тогда в myfunc () первый вызов getc вернет 'g'.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я предлагаю читать и отбрасывать символы, пока вы не встретите два пробела.

Напишите функцию для этого:

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

и используйте его там, где это наиболее целесообразно в вашем коде.

0 голосов
/ 03 мая 2018

Вы ищете функцию fseek(). Просто напишите

fseek(myfile, 9, SEEK_SET);

перед передачей myfile в вашу функцию. Возможно, вы захотите проверить возвращаемое значение, чтобы знать, была ли успешной установка позиции.


Кстати, не путайте «указатель положения файла» (иногда называемый «указатель файла») с «указателем на FILE». Это разные вещи. Индикатор положения файла хранится где-то внутри FILE (или, что более вероятно, в каком-либо объекте операционной системы, связанном с FILE), чтобы знать, какую позицию в файле следует читать или записывать дальше. FILE * с другой стороны - это ячейка памяти вашей (stdio-internal) FILE структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...