Namensräume
Varianten
Aktionen

std::fgets

Von cppreference.com
< cpp‎ | io‎ | c
 
 
 
C-Style I/O
Typen und Objekte
Funktionen
Datei-Zugriff
Direkte Ein-/Ausgabe
Unformatierte Ein-/Ausgabe
Formatierte Eingabe
(C++11)(C++11)(C++11)    
(C++11)(C++11)(C++11)    
 
Definiert in Header <cstdio>
char* fgets( char* str, int count, std::FILE* stream );

Liest höchstens count - 1 Zeichen aus dem gegebenen Dateistream und speichert sie im Zeichen-Array, 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 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 die End-of-File-Bedingung eintritt, wird der eof-Indikator für stream gesetzt (siehe std::feof()). Dies ist nur dann ein Fehler, wenn keine Bytes gelesen werden. In diesem Fall wird ein Nullzeiger zurückgegeben und der Inhalt des von str referenzierten Arrays wird nicht geä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 für stream gesetzt (siehe std::ferror()). Der Inhalt des von str referenzierten Arrays ist undefiniert (es ist möglicherweise nicht einmal null-terminiert).

[edit] Hinweise

POSIX verlangt zusätzlich, dass fgets errno setzt, wenn es einen anderen Fehler als das Dateiende feststellt.

Obwohl die Standardvorgabe unklar ist (unklar) für Fälle, in denen count <= 1, tun gängige Implementierungen

  • wenn count < 1, tue nichts, melde Fehler,
  • wenn count == 1,
  • einige Implementierungen tun nichts, melden Fehler,
  • andere lesen nichts, speichern Null in str[0], melden Erfolg.

[edit] 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

[edit] Siehe auch

liest formatierte Eingaben von stdin, einem Dateistream oder einem Puffer
(Funktion) [edit]
(veraltet in C++11)(entfernt in C++14)
liest eine Zeichenkette von stdin
(function) [bearbeiten]
schreibt einen Zeichenstring in einen Dateistream
(function) [bearbeiten]
C-Dokumentation für fgets