GETS(3)

BEZEICHNUNG
fgetc, fgets, getc, getchar, ungetc - Eingabe von Zeichen und Strings

ÜBERSICHT
#include <stdio.h>

int fgetc(FILE *stream);
char *fgets(char *s, int size, FILE *stream);
int getc(FILE *stream);
int getchar(void);
char *gets(char *s);
int ungetc(int c, FILE *stream);

BESCHREIBUNG
fgetc() liest das nächste Zeichen von stream und gibt es als ein unsigned char gecastet in einem int zurück, oder EOF bei Ende oder Datefehler.

getc() ist äquivalent zu fgetc(), außer dass es als ein Makro implementiert sein darf, der stream mehr als einmal auswertet.

getchar() ist äquivalent zu getc(stdin).

gets() liest einen Zeile von stdin in der Puffer, auf den s zeigt, bis entweder ein abschließender Zeilenvorschub oder EOF auftritt, welche durch '\0' ersetzt werden. Es wird keine Prüfung auf Pufferüberlauf durchgeführt (siehe BUGS unten).

fgets() liest höchstens size minus ein Zeichen von stream und speichert sie in dem Puffer, auf den s zeigt. Das Lesen stoppt nach einem EOF oder Zeilenvorschub. Wenn ein Zeilenvorschub gelesen wird, wird er in dem Puffer gespeichert. Ein '\0' wird nach dem letzten Zeichen im Puffer gespeichert.

ungetc() schiebt c zurück zu stream, gecasted in einem unsigned char, wenn es für folgende Leseoperationen möglich ist. Zurückgeschobene Zeichen werden in umgekehrter Reihenfolge zurückgegeben; nur ein Zurückschieben wird unterstützt.

Aufrufe der hier beschriebenen Funktionen können für den selben Eingabestream untereinander und mit anderen Eingabefunktionen der Bibliothek stdio gemischt werden.

RÜCKGABEWERTE
fgetc(), getc() und getchar() geben das gelesene Zeichen als ein unsigned char gecastet in einem int zurück, oder EOF bei Dateiende oder Fehler.

gets() und fgets() geben s zurück bei Erfolg, und NULL im Fehlerfall oder wenn Dateiende auftritt ohne dass Zeichen gelesen wurden.

ungetc() gibt c zurück bei Erfolg, oder EOF im Fehlerfall.

KONFORM ZU
ANSI - C, POSIX.1

BUGS
Da es unmöglich ist zu sagen, wie viele Zeichen Zeichen gets() lesen wird, ohne die Daten vorher zu kennen und da gets() fortfährt und Daten über das Ende des Puffers hinaus speichert, ist es sehr gefährlich, diese Funktion zu benutzen. Sie wurde benutzt um in Rechner einzubrechen. Benutze fgets() anstatt.

Es ist nicht ratsam, Aufrufe von Funktionen der Bibliothek stdio mit low-level-Aufrufen von read() für den Dateideskriptor zu mischen, der mit demselben Eingabestream verbunden ist; die Ergebnisse sind undefiniert und sehr wahrscheinlich nicht erwünscht.

SIEHE AUCH
read(2), write(2), fopen(3), fread(3), scanf(3), puts(3), fseek(3), ferror(3).