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 Dateistream und speichert sie im Zeichenarray, auf das von str verwiesen wird. Das Parsen stoppt, wenn ein Zeilenumbruchzeichen gefunden wird (in diesem Fall enthält str dieses Zeilenumbruchzeichen) oder wenn das Dateiende erreicht wird. Wenn Bytes gelesen werden und keine Fehler auftreten, wird ein Nullzeichen an der Position unmittelbar nach dem letzten geschriebenen Zeichen in str geschrieben.
Inhalt |
[edit] Parameter
| str | - | Zeiger auf ein Element eines char-Arrays |
| zählt | - | maximale Anzahl von zu schreibenden Zeichen (typischerweise die Länge von str) |
| stream | - | Dateistream, aus dem die Daten gelesen werden sollen |
[edit] Rückgabewert
str bei Erfolg, Nullzeiger bei Fehler.
Wenn das Dateiende-Ereignis eintritt, wird der eof-Indikator für stream gesetzt (siehe feof()). Dies ist nur ein Fehler, wenn keine Bytes gelesen werden. In diesem Fall wird ein Nullzeiger zurückgegeben und der Inhalt des Arrays, auf das von str verwiesen wird, bleibt unverändert (d.h. das erste Byte wird nicht mit einem Nullzeichen überschrieben).
Wenn der Fehler durch einen anderen Fehler verursacht wurde, wird der error-Indikator (siehe ferror()) für stream gesetzt. Der Inhalt des Arrays, auf das von str verwiesen wird, ist undefiniert (es ist möglicherweise nicht einmal null-terminiert).
[edit] Hinweise
POSIX schreibt zusätzlich vor, dass fgets errno setzt, wenn ein Lesefehler auftritt.
Obwohl die Standardisierung unklar ist (unklar) für Fälle, in denen count <= 1 ist, tun gängige Implementierungen:
- wenn count < 1, nichts tun, Fehler melden,
- wenn count == 1,
- einige Implementierungen tun nichts, melden Fehler,
- andere lesen nichts, speichern Null in str[0], melden Erfolg.
[edit] 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
[edit] Referenzen
- C23-Standard (ISO/IEC 9899:2024)
- 7.21.7.2 Die Funktion fgets (p: TBD)
- C17-Standard (ISO/IEC 9899:2018)
- 7.21.7.2 Die Funktion fgets (p: 241)
- C11-Standard (ISO/IEC 9899:2011)
- 7.21.7.2 Die Funktion fgets (p: 331)
- C99-Standard (ISO/IEC 9899:1999)
- 7.19.7.2 Die Funktion fgets (p: 296)
- C89/C90-Standard (ISO/IEC 9899:1990)
- 4.9.7.2 Die Funktion fgets
[edit] Siehe auch
| (C11)(C11)(C11) |
liest formatierte Eingaben aus stdin, einem Dateistream oder einem Puffer (Funktion) |
| (entfernt in C11)(C11) |
liest einen Zeichenstring aus stdin (Funktion) |
| schreibt einen Zeichenstring in einen Dateistream (Funktion) | |
| (Dynamischer Speicher-TR) |
liest von einem Stream in einen automatisch skalierten Puffer bis zum Trennzeichen/Zeilenende (Funktion) |
| C++ Dokumentation für fgets
| |