Namensräume
Varianten
Aktionen

fgets

Von cppreference.com
< c‎ | io
 
 
Datei-Ein-/Ausgabe
Typen und Objekte
        
Funktionen
Datei-Zugriff
(C95)
Unformatierte Ein-/Ausgabe
(C95)(C95)
(C95)
(C95)(C95)
(C95)
(C95)

Formatierte Eingabe
Direkte Ein-/Ausgabe
Formatierte Ausgabe
Dateipositionierung
Fehlerbehandlung
Operationen auf Dateien
 
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

liest formatierte Eingaben aus stdin, einem Dateistream oder einem Puffer
(Funktion) [bearbeiten]
(entfernt in C11)(C11)
liest einen Zeichenstring aus stdin
(Funktion) [bearbeiten]
schreibt einen Zeichenstring in einen Dateistream
(Funktion) [bearbeiten]
(Dynamischer Speicher-TR)
liest von einem Stream in einen automatisch skalierten Puffer bis zum Trennzeichen/Zeilenende
(Funktion) [bearbeiten]