Namespaces
Variants

gets, gets_s

From cppreference.net
< c ‎ | io
Défini dans l'en-tête <stdio.h>
char * gets ( char * str ) ;
(1) (supprimé en C11)
char * gets_s ( char * str, rsize_t n ) ;
(2) (depuis C11)
1) Lit depuis stdin dans le tableau de caractères pointé par str jusqu'à ce qu'un caractère de nouvelle ligne soit trouvé ou que la fin de fichier se produise. Un caractère nul est écrit immédiatement après le dernier caractère lu dans le tableau. Le caractère de nouvelle ligne est ignoré mais n'est pas stocké dans le tampon.
2) Lit les caractères depuis stdin jusqu'à ce qu'un saut de ligne soit trouvé ou que la fin de fichier se produise. Écrit au maximum n - 1 caractères dans le tableau pointé par str , et écrit toujours le caractère nul de terminaison (sauf si str est un pointeur nul). Le caractère de saut de ligne, s'il est trouvé, est ignoré et ne compte pas dans le nombre de caractères écrits dans le tampon.
Les erreurs suivantes sont détectées à l'exécution et appellent la fonction constraint handler actuellement installée :
  • n est nul ;
  • n est supérieur à RSIZE_MAX ;
  • str est un pointeur nul ;
  • endline ou eof non rencontrés après le stockage de n - 1 caractères dans le tampon.
Dans tous les cas, gets_s commence par terminer la lecture et ignorer les caractères de stdin jusqu'au caractère de nouvelle ligne, condition de fin de fichier, ou erreur de lecture avant d'appeler le gestionnaire de contraintes.
Comme pour toutes les fonctions à vérification de limites, gets_s est uniquement garantie d'être disponible si __STDC_LIB_EXT1__ est défini par l'implémentation et si l'utilisateur définit __STDC_WANT_LIB_EXT1__ à la constante entière 1 avant d'inclure <stdio.h> .

Table des matières

Paramètres

str - un tableau de caractères vers lequel les caractères de stdin seront écrits
n - nombre maximum de caractères pouvant être écrits dans le tableau pointé par str

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, positionne également l'indicateur eof (voir feof() ) sur stdin . Si l'échec a été causé par une autre erreur, positionne l'indicateur error (voir ferror() ) sur stdin .

Notes

La fonction 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 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 dans le troisième corrigendum de la norme C99 et supprimée complètement dans la norme C11. fgets() et gets_s() sont les remplacements recommandés.

AVERTISSEMENT : N'utilisez jamais gets() .

Références

  • Norme C23 (ISO/CEI 9899:2024) :
  • K.3.5.4.1 La fonction gets_s (p: TBD)
  • Norme C17 (ISO/CEI 9899:2018) :
  • K.3.5.4.1 La fonction gets_s (p: TBD)
  • Norme C11 (ISO/IEC 9899:2011) :
  • K.3.5.4.1 La fonction gets_s (p: 602-603)
  • Norme C99 (ISO/IEC 9899:1999) :
  • 7.19.7.7 La fonction gets (p: 298)
  • Norme C89/C90 (ISO/IEC 9899:1990) :
  • 4.9.7.7 La fonction gets

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)
lit depuis un flux dans un tampon redimensionné automatiquement jusqu'au délimiteur/fin de ligne
(fonction)