2010-01-17 22 views

Odpowiedz

38

fgetc + ungetc . Może coś takiego:

int fpeek(FILE *stream) 
{ 
    int c; 

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

    return c; 
} 
+1

warunkowego jest niepotrzebna: 'ungetc (EOF, bla)' jest dobrze zdefiniowane ("Jeżeli wartość C jest równa że makra EOF, operacja nie powiedzie się, a strumień wejściowy jest niezmienione ") – Christoph

+0

@ Christoph: To jest przydatne. Moja strona podręcznika nie zawierała tej ciekawostki, ale ta, do której się przyłączyłem ... – ephemient

+0

@emil: W języku C, 'EOF' może być dowolną liczbą całkowitą ujemną. – dreamlax

2

musisz go zaimplementować samodzielnie. używać fread czytać następny znak i fseek wrócić do miejsca, gdzie były przed czytać

EDIT:

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