У вас есть три варианта:
1) использование ftell/fseek
Пример:
FILE * pFile;
char c1, c2;
long offset;
pFile = fopen ("example.txt" , "r");
offset = ftell(pFile);
c1 = fgetc(pFile);
fseek (pFile , offset , SEEK_SET);
c2 = fgetc(pFile);
/* result: c1 == c2 */
(Замечание: для двоичного потока вы также можете t ry, используя fseek(pFile, -1, SEEK_CUR)
, но для текстового режима, как было отмечено, получение одного символа может привести к указанию более чем на одну позицию).
2) use fgetpos/fsetpos
Пример:
FILE * pFile;
fpos_t position;
char c1, c2;
pFile = fopen ("example.txt","r");
fgetpos (pFile, &position);
c1 = fgetc(pFile);
fsetpos (pFile, &position);
c2 = fgetc(pFile);
/* result: c1 == c2 */
3) использовать ungetc
FILE * pFile;
char c1, c2;
c1 = fgetc(pFile);
ungetc(c1, pFile);
c2 = fgetc(pFile);
/* result: c1 == c2 */
Какой из этих методов будет более эффективным, является платформы и зависит от реализации , Например. может быть, что под капюшоном ungetc
, например, перечитает текущий кусок до текущей точки. Или может быть, что он просто перемещает указатель в буфер памяти.
Что-то вроде этого? http://stackoverflow.com/a/2082772/535275 –
В каком объекте '' fpos_t' вы ссылаетесь, что такое «указатель под ним» и как они отличаются? –