Namespaces
Variants

std:: gets

From cppreference.net
< cpp ‎ | io ‎ | c
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)