2010-01-17 9 views
21

Sé que en C++, puedes echar un vistazo al siguiente caracter usando: in.peek();.C equivalente a fstream's peek

¿Cómo voy a hacer esto cuando trato de "echar un vistazo" al siguiente caracter de un archivo en C?

Respuesta

38

fgetc + ungetc . Tal vez algo como esto:

int fpeek(FILE *stream) 
{ 
    int c; 

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

    return c; 
} 
+1

el condicional es innecesaria: 'ungetc (EOF, foo)' está bien definido ("Si el valor de c es igual a la de la EOF macro, la operación falla y la corriente de entrada es sin cambios ") – Christoph

+0

@Christoph: Eso es útil. La página de mi hombre no incluía ese tidbit, pero el que he vinculado hace ... – ephemient

+0

@emil: en C, 'EOF' puede ser cualquier número entero negativo. – dreamlax

2

tendrá que implementarlo usted mismo. utilizar fread para leer el siguiente carácter y fseek que volver a donde estaba antes de la lectura

EDITAR:

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