fgets
| Definiert in Header <stdio.h>
|
||
char* fgets( char* str, int count, FILE* stream );
|
(bis C99) | |
char* fgets( char* restrict str, int count, FILE* restrict stream );
|
(seit C99) | |
Liest höchstens count - 1 Zeichen aus dem gegebenen Datenstrom und speichert sie in dem Zeichenfeld, auf das str zeigt. Das Parsen stoppt, wenn ein Zeilenumbruchzeichen gefunden wird (in diesem Fall enthält str dieses Zeilenumbruchzeichen) oder wenn das Dateiende erreicht ist. Wenn Bytes gelesen werden und keine Fehler auftreten, wird ein Nullzeichen an die Stelle unmittelbar nach dem letzten in str geschriebenen Zeichen gesetzt.
Parameter
| str | - | Zeiger auf ein Element eines char-Arrays |
| count | - | maximale Anzahl der zu schreibenden Zeichen (üblicherweise die Länge von str)
|
| stream | - | Datenstrom, aus dem gelesen werden soll |
Rückgabewert
str str bei Erfolg, Nullzeiger bei Fehler.
Tritt die Dateiende-Bedingung ein, wird der eof-Indikator für stream gesetzt (siehe feof()). Dies ist nur ein Fehler, wenn dadurch keine Bytes gelesen werden; in diesem Fall wird ein Nullzeiger zurückgegeben und der Inhalt des Feldes, auf das str zeigt, wird nicht verändert (d.h. das erste Byte wird nicht mit einem Nullzeichen überschrieben).
Wird der Fehler durch einen anderen Fehler verursacht, wird der error-Indikator (siehe ferror()) für stream gesetzt. Der Inhalt des Feldes, auf das str zeigt, ist unbestimmt (es muss nicht einmal mit Null terminiert sein).
Anmerkungen
POSIX verlangt zusätzlich, dass fgets errno setzt, wenn ein Lesefehler auftritt.
Obwohl die Normspezifikation unklar ist in den Fällen, in denen count <= 1, verhalten sich gängige Implementierungen wie folgt:
- wenn
count < 1, nichts tun, Fehler melden, - wenn
count == 1,
- manche Implementierungen tun nichts, melden Fehler,
- andere lesen nichts, speichern Null in
str[0], melden Erfolg.
Beispiel
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE* tmpf = tmpfile();
fputs("Alan Turing\n", tmpf);
fputs("John von Neumann\n", tmpf);
fputs("Alonzo Church\n", tmpf);
rewind(tmpf);
char buf[8];
while (fgets(buf, sizeof buf, tmpf) != NULL)
printf("\"%s\"\n", buf);
if (feof(tmpf))
puts("End of file reached");
}
Ausgabe:
"Alan Tu"
"ring
"
"John vo"
"n Neuma"
"nn
"
"Alonzo "
"Church
"
End of file reached
Referenzen
- C23 Standard (ISO/IEC 9899:2024):
- 7.21.7.2 Die fgets-Funktion (p: TBD)
- C17 Standard (ISO/IEC 9899:2018):
- 7.21.7.2 Die fgets-Funktion (p: 241)
- C11 Standard (ISO/IEC 9899:2011):
- 7.21.7.2 Die fgets-Funktion (p: 331)
- C99 Standard (ISO/IEC 9899:1999):
- 7.19.7.2 Die fgets-Funktion (p: 296)
- C89/C90 Standard (ISO/IEC 9899:1990):
- 4.9.7.2 Die fgets-Funktion
Siehe auch
(C11)(C11)(C11) |
liest formatierte Eingabe von stdin, einem Datenstrom oder einem Puffer (Funktion) |
(entfernt in C11)(C11) |
liest eine Zeichenkette von stdin (Funktion) |
| schreibt eine Zeichenkette in einen Datenstrom (Funktion) | |
(Dynamic Memory TR) |
liest aus einem Datenstrom in einen automatisch vergrößerten Puffer bis zum Trennzeichen/Zeilenende (Funktion) |
C++-Dokumentation für fgets
| |