2010-01-17 16 views

risposta

38

fgetc + ungetc . Forse qualcosa di simile:

int fpeek(FILE *stream) 
{ 
    int c; 

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

    return c; 
} 
+1

il condizionale è inutile: 'ungetc (EOF, foo)' è ben definito ("Se il valore di c è uguale a quella del EOF macro, l'operazione non riesce e il flusso di input è invariato ") – Christoph

+0

@Christoph: È utile. La mia pagina man non includeva quel tidbit, ma quello a cui mi sono collegato ... – ephemient

+0

@emil: In C, 'EOF' può essere un numero intero negativo. – dreamlax

2

è necessario implementarlo da soli. utilizzare fread per leggere il carattere successivo e fseek per tornare a dove eravate prima della lettura

EDIT:

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