2010-01-17 58 views
21

我知道在C++中,你可以使用下面的字符偷看:in.peek();C相當於fstream的窺視片

當我試圖「偷看」C中文件的下一個字符時,該如何處理?

回答

38

fgetc + ungetc 。也許是這樣的:

int fpeek(FILE *stream) 
{ 
    int c; 

    c = fgetc(stream); 
    ungetc(c, stream); 

    return c; 
} 
+1

條件是不必要的:'ungetc函數(EOF,FOO)'是良好定義(「如果c的值等於該宏EOF的,操作失敗和輸入流是不變「) – Christoph 2010-01-17 21:45:51

+0

@Christoph:這很方便。我的手冊頁沒有包含那個珍聞,但是我鏈接的那個沒有... – ephemient 2010-01-17 22:13:30

+0

@emil:在C中,'EOF'可以是任何負數。 – dreamlax 2010-01-17 23:05:19

2

你需要自己實現它。使用fread讀取下一個字符,fseek回到原來的位置之前,閱讀

編輯

int fsneaky(FILE *stream, int8_t *pBuff, int sz) { 
    sz = fread(pBuff, 1, sz, stream) 
    fseek(pFile, -sz, SEEK_CUR); 
    return(sz); 
}