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 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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) |
|
|
Documentation C
pour
gets
|
|