[英]fgetc without incrementing pointer OR decrementing the fpos_t object (C)
所以我找不到這個問題的答案。
是否有:
一個類似於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
,將重新讀取當前塊直到當前點。 也可能是它只是將指針移到了內存緩沖區中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.