Namespaces
Variants

fgets

Von de.cppreference.net
< c | io
 
 
Datei-Eingabe/Ausgabe
Typen und Objekte
        
Funktionen
Dateizugriff
(C95)
Unformatierte Eingabe/Ausgabe
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Formatierte Eingabe
Direkte Eingabe/Ausgabe
Formatierte Ausgabe
Dateipositionierung
Fehlerbehandlung
Dateioperationen
 
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

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)
liest aus einem Datenstrom in einen automatisch vergrößerten Puffer bis zum Trennzeichen/Zeilenende
(Funktion)