Namespaces
Variants

std:: fgets

From cppreference.net
< cpp ‎ | io ‎ | c
Definiert in Header <cstdio>
char * fgets ( char * str, int count, std:: FILE * stream ) ;

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 welchem Fall str dieses Zeilenumbruchzeichen enthält, oder wenn das Dateiende erreicht wird. Wenn Bytes gelesen werden und keine Fehler auftreten, wird ein Nullzeichen direkt 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 Misserfolg.

Wenn die Dateiende-Bedingung auftritt, setzt es den eof -Indikator auf dem stream (siehe std::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 Fehlschlag durch einen anderen Fehler verursacht wurde, setzt dies den error -Indikator (siehe std::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 errno setzt, wenn es auf einen Fehler stößt, der nicht der End-of-File-Zustand ist.

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

  • wenn count < 1 , nichts unternehmen, Fehler melden,
  • wenn count == 1 ,
  • manche Implementierungen tun nichts, melden einen Fehler,
  • andere lesen nichts, speichern Null in str [ 0 ] , melden Erfolg.

Beispiel

#include <cstdio>
#include <cstdlib>
#include <iomanip>
#include <iostream>
#include <span>
void dump(std::span<const char> buf, std::size_t offset)
{
    std::cout << std::dec;
    for (char ch : buf)
        std::cout << (ch >= ' ' ? ch : '.'), offset--;
    std::cout << std::string(offset, ' ') << std::hex
              << std::setfill('0') << std::uppercase;
    for (unsigned ch : buf)
        std::cout << std::setw(2) << ch << ' ';
    std::cout << std::dec << '\n';
}
int main()
{
    std::FILE* tmpf = std::tmpfile();
    std::fputs("Alan Turing\n", tmpf);
    std::fputs("John von Neumann\n", tmpf);
    std::fputs("Alonzo Church\n", tmpf);
    std::rewind(tmpf);
    for (char buf[8]; std::fgets(buf, sizeof buf, tmpf) != nullptr;)
        dump(buf, 10);
}

Ausgabe:

Alan Tu.  41 6C 61 6E 20 54 75 00 
ring..u.  72 69 6E 67 0A 00 75 00 
John vo.  4A 6F 68 6E 20 76 6F 00 
n Neuma.  6E 20 4E 65 75 6D 61 00 
nn..uma.  6E 6E 0A 00 75 6D 61 00 
Alonzo .  41 6C 6F 6E 7A 6F 20 00 
Church..  43 68 75 72 63 68 0A 00

Siehe auch

liest formatierten Input von stdin , einem Dateistrom oder einem Puffer
(Funktion)
(veraltet in C++11) (entfernt in C++14)
liest eine Zeichenkette von stdin
(Funktion)
schreibt eine Zeichenkette in einen Dateistrom
(Funktion)