Namespaces
Variants

fgets

From cppreference.net
< c ‎ | io
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 maximal count - 1 Zeichen aus dem gegebenen Dateistrom und speichert sie im Zeichenarray, auf das str zeigt. Das Parsen wird beendet, 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 in str geschriebenen Zeichen geschrieben.

Inhaltsverzeichnis

Parameter

str - Zeiger auf ein Element eines char-Arrays
count - maximale Anzahl der zu schreibenden Zeichen (typischerweise die Länge von str )
stream - Dateistream, aus dem die Daten gelesen werden

Rückgabewert

str bei Erfolg, Nullzeiger bei Fehler.

Wenn die Dateiende-Bedingung auftritt, setzt es den eof -Indikator auf stream (siehe feof() ). Dies ist nur ein Fehler, wenn dadurch keine Bytes gelesen werden, in welchem Fall ein Nullzeiger zurückgegeben wird und der Inhalt des Arrays, auf das str zeigt, unverändert bleibt (d.h. das erste Byte wird nicht mit einem Nullzeichen überschrieben).

Wenn der Fehler durch einen anderen Fehler verursacht wurde, setzt es den error -Indikator (siehe ferror() ) auf stream . Der Inhalt des Arrays, auf das str zeigt, ist unbestimmt (es muss nicht einmal nullterminiert sein).

Hinweise

POSIX verlangt zusätzlich , dass fgets den errno setzt, wenn ein Lesefehler auftritt.

Obwohl die Spezifikation des Standards in den Fällen, in denen unklar ist, wo count <= 1 , tun gängige Implementierungen dies

  • wenn count < 1 , tue nichts, melde Fehler,
  • wenn count == 1 ,
  • manche Implementierungen tun nichts, melden einen 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 (S.: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.21.7.2 Die fgets-Funktion (S: 241)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.21.7.2 Die fgets-Funktion (S: 331)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.19.7.2 Die fgets-Funktion (S. 296)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.9.7.2 Die fgets-Funktion

Siehe auch

Liest formatierten Input von stdin , einem Dateistrom oder einem Puffer
(Funktion)
(entfernt in C11) (C11)
Liest eine Zeichenkette von stdin
(Funktion)
Schreibt eine Zeichenkette in einen Dateistrom
(Funktion)
Liest von einem Strom in einen automatisch vergrößerten Puffer bis Trennzeichen/Zeilende
(Funktion)