所以我找不到这个问题的答案。
是否有:
一个类似于 fgetc 的函数,它在指针处检索字符,而不增加指针?
或者一种减少 fpos_t 对象而不减少它下面的指针的方法。(对这个答案最感兴趣)
对于 C。
你有三个选择:
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 */
(备注:对于二进制流,您也可以尝试使用fseek(pFile, -1, SEEK_CUR)
但是对于文本模式,如前所述,获取一个字符可能会使指针前进一个以上的位置)。
例子:
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
,例如,将重新读取当前块直到当前点。或者它可能只是将指针移动到内存缓冲区中。