std:: fgets
|
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) |
|
|
C-Dokumentation
für
fgets
|
|