std::fgets
| 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) | |
| (veraltet in C++11)(entfernt in C++14) |
liest eine Zeichenkette von stdin (function) |
| schreibt einen Zeichenstring in einen Dateistream (function) | |
| C-Dokumentation für fgets
| |