C entspricht dem Peek von fstream

Lesezeit: 1 Minute

Ich weiß, dass Sie in C ++ einen Blick auf das nächste Zeichen werfen können, indem Sie Folgendes verwenden: in.peek();.

Wie würde ich vorgehen, wenn ich versuche, das nächste Zeichen einer Datei in C zu “spähen”?

Benutzer-Avatar
vergänglich

fgetc+unget. Vielleicht so etwas:

int fpeek(FILE *stream)
{
    int c;

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

    return c;
}

  • Die Bedingung ist unnötig: ungetc(EOF, foo) ist wohldefiniert (“Wenn der Wert von c gleich dem des Makro-EOF ist, schlägt die Operation fehl und der Eingabestrom bleibt unverändert”)

    – Christoph

    17. Januar 2010 um 21:45 Uhr

  • @Christoph: Das ist praktisch. Meine Manpage enthielt diesen Leckerbissen nicht, aber die, auf die ich verlinkt habe, schon …

    – vergänglich

    17. Januar 2010 um 22:13 Uhr

  • @emil: In C, EOF kann jede negative ganze Zahl sein.

    – Traumlax

    17. Januar 2010 um 23:05 Uhr

  • @dreamlax: Ich verstehe das, aber Sie müssen die negative Ganzzahl irgendwie darstellen, in binär -1 als 8-Bit-Zeichen ist: 0xff = 11111111. Wenn also getc ein 8-Bit-Zeichen (0x00-0xff) zurückgeben würde, würde es nicht genug Platz für EOF sein. Und da es sich um eine Ganzzahl handelt, sagen wir, es sind 4 Zeichen ‘ein 32 Bit, dann kann jeder andere Wert im Bereich 0x00000100-0xffffffff zurückgegeben werden, dh: (-2147483648 – -1 und 256 – 2147483647)

    – emil

    18. Januar 2010 um 10:25 Uhr

Sie könnten eine verwenden getc gefolgt von einem ungetc

Benutzer-Avatar
Karl Ma

Sie müssen es selbst implementieren. verwenden Angst um das nächste Zeichen zu lesen und fseek um dorthin zurückzukehren, wo Sie vor dem Lesen waren

BEARBEITEN:

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

  • Dies funktioniert nicht, wenn die FILE* ist unauffindbar – zum Beispiel ein Terminal oder eine Leitung.

    – Maja

    10. September 2019 um 18:38 Uhr

1385800cookie-checkC entspricht dem Peek von fstream

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy