std:: gets
| I/O manipulators | ||||
| Print functions (C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(C++20)
|
||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
|
(
C++98/26*
)
|
||||
| Synchronized Output | ||||
|
(C++20)
|
||||
| Types | ||||
| Error category interface | ||||
|
(C++11)
|
||||
|
(C++11)
|
| Types and objects | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Functions | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert in Header
<cstdio>
|
||
|
char
*
gets
(
char
*
str
)
;
|
(veraltet in C++11)
(entfernt in C++14) |
|
Liest von stdin in die angegebene Zeichenkette ein, bis ein Zeilenumbruchzeichen gefunden wird oder das Dateiende erreicht ist.
Inhaltsverzeichnis |
Parameter
| str | - | zu schreibende Zeichenkette |
Rückgabewert
str
bei Erfolg, ein Nullzeiger bei Fehler.
Wenn der Fehler durch eine Dateiende-Bedingung verursacht wurde, wird zusätzlich der eof -Indikator gesetzt (siehe std::feof() ) auf stdin . Wenn der Fehler durch einen anderen Fehler verursacht wurde, wird der error -Indikator gesetzt (siehe std::ferror() ) auf stdin .
Hinweise
Die
std::gets()
-Funktion führt keine Bereichsprüfung durch. Daher ist diese Funktion äußerst anfällig für Pufferüberlauf-Angriffe. 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 vollständig entfernt.
std::fgets()
kann stattdessen verwendet werden.
Beispiel
#include <array> #include <cstdio> #include <cstring> int main() { std::puts("Verwenden Sie niemals std::gets(). Verwenden Sie stattdessen std::fgets()!"); std::array<char, 16> buf; std::printf("Geben Sie eine Zeichenkette ein:\n>"); if (std::fgets(buf.data(), buf.size(), stdin)) { const auto len = std::strlen(buf.data()); std::printf( "Die eingegebene Zeichenkette:\n[%s] ist %s und hat eine Länge von %li Zeichen.\n", buf.data(), len + 1 < buf.size() ? "nicht abgeschnitten" : "abgeschnitten", len ); } else if (std::feof(stdin)) { std::puts("Fehler: Das Ende des stdin-Streams wurde erreicht."); } else if (std::ferror(stdin)) { std::puts("E/A-Fehler beim Lesen von stdin."); } else { std::puts("Unbekannter stdin-Fehler."); } }
Mögliche Ausgabe:
Verwenden Sie niemals std::gets(). Verwenden Sie stattdessen std::fgets()! Geben Sie eine Zeichenkette ein: >Living on Earth is expensive, but it does include a free trip around the Sun. Die eingegebene Zeichenkette: [Living on Earth] ist abgeschnitten und hat eine Länge von 15 Zeichen.
Siehe auch
|
Liest formatierten Input von
stdin
, einem Dateistream oder einem Buffer
(Funktion) |
|
|
Liest eine Zeichenkette aus einem Dateistream
(Funktion) |
|
|
Schreibt eine Zeichenkette in einen Dateistream
(Funktion) |
|
|
C-Dokumentation
für
gets
|
|