std::gets
| Definiert in Header <cstdio> |
||
| char* gets( char* str ); |
(in C++11 veraltet) (in C++14 entfernt) |
|
Liest von stdin in den gegebenen Zeichenstring, bis ein Zeilenumbruchzeichen gefunden wird oder das Dateiende erreicht ist.
Inhalt |
[bearbeiten] Parameter
| str | - | zu schreibender Zeichenstring |
[bearbeiten] Rückgabewert
str bei Erfolg, ein Nullzeiger bei Fehler.
Wenn der Fehler durch die End-of-File-Bedingung verursacht wurde, wird zusätzlich die eof-Anzeige (siehe std::feof()) von stdin gesetzt. Wenn der Fehler durch einen anderen Fehler verursacht wurde, wird die error-Anzeige (siehe std::ferror()) von stdin gesetzt.
[bearbeiten] Hinweise
Die Funktion std::gets() führt keine Bereichsprüfung durch. Daher ist diese Funktion extrem anfällig für Pufferüberlaufangriffe. Sie kann nicht sicher verwendet werden (es sei denn, das Programm läuft in einer Umgebung, die einschränkt, was auf stdin erscheinen kann). Aus diesem Grund wurde die Funktion in C++11 als veraltet markiert und in C++14 komplett entfernt. std::fgets() kann stattdessen verwendet werden.
[bearbeiten] Beispiel
#include <array> #include <cstdio> #include <cstring> int main() { std::puts("Never use std::gets(). Use std::fgets() instead!"); std::array<char, 16> buf; std::printf("Enter a string:\n>"); if (std::fgets(buf.data(), buf.size(), stdin)) { const auto len = std::strlen(buf.data()); std::printf( "The input string:\n[%s] is %s and has the length %li characters.\n", buf.data(), len + 1 < buf.size() ? "not truncated" : "truncated", len ); } else if (std::feof(stdin)) { std::puts("Error: the end of stdin stream has been reached."); } else if (std::ferror(stdin)) { std::puts("I/O error when reading from stdin."); } else { std::puts("Unknown stdin error."); } }
Mögliche Ausgabe
Never use std::gets(). Use std::fgets() instead! Enter a string: >Living on Earth is expensive, but it does include a free trip around the Sun. The input string: [Living on Earth] is truncated and has the length 15 characters.
[bearbeiten] Siehe auch
| liest formatierte Eingaben von stdin, einem Dateistream oder einem Puffer (Funktion) | |
| liest einen Zeichenstring aus einem Dateistream (function) | |
| schreibt einen Zeichenstring in einen Dateistream (function) | |
| C-Dokumentation für gets
| |