簡體   English   中英

fgetc而不增加指針或減少fpos_t對象(C)

[英]fgetc without incrementing pointer OR decrementing the fpos_t object (C)

所以我找不到這個問題的答案。

是否有:

  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) 使用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 ,將重新讀取當前塊直到當前點。 也可能是它只是將指針移到了內存緩沖區中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM