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”?
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”?
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
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