gpt4 book ai didi

c - fgetc 不增加指针或减少 fpos_t 对象 (C)

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:13 24 4
gpt4 key购买 nike

所以我找不到这个问题的答案。

是否有:

  1. 一个类似于 fgetc 的函数,它在不增加指针的情况下检索指针处的字符?

  2. 或者减少 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) 但是对于文本模式,如前所述,获取一个字符可能会使指针前进不止一个职位)。

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 会重新读取当前 block 直到当前点。或者它可能只是将指针移动到内存缓冲区中。

关于c - fgetc 不增加指针或减少 fpos_t 对象 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26247509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com