Namespaces
Variants

std:: gets

From cppreference.net
< cpp ‎ | io ‎ | c
Défini dans l'en-tête <cstdio>
char * gets ( char * str ) ;
(obsolète en C++11)
(supprimé en C++14)

Lit stdin dans la chaîne de caractères donnée jusqu'à ce qu'un caractère de nouvelle ligne soit trouvé ou que la fin de fichier se produise.

Table des matières

Paramètres

str - chaîne de caractères à écrire

Valeur de retour

str en cas de succès, un pointeur nul en cas d'échec.

Si l'échec a été causé par une condition de fin de fichier, définit également l'indicateur eof (voir std::feof() ) sur stdin . Si l'échec a été causé par une autre erreur, définit l'indicateur error (voir std::ferror() ) sur stdin .

Notes

La fonction std::gets() n'effectue pas de vérification des limites. Par conséquent, cette fonction est extrêmement vulnérable aux attaques par dépassement de mémoire tampon. Elle ne peut pas être utilisée en toute sécurité (à moins que le programme ne s'exécute dans un environnement qui restreint ce qui peut apparaître sur stdin ). Pour cette raison, la fonction a été dépréciée en C++11 et supprimée complètement en C++14. std::fgets() peut être utilisée à la place.

Exemple

#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.");
    }
}

Sortie possible :

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.

Voir aussi

lit une entrée formatée depuis stdin , un flux de fichier ou un tampon
(fonction)
obtient une chaîne de caractères depuis un flux de fichier
(fonction)
écrit une chaîne de caractères vers un flux de fichier
(fonction)