Pas d'erreur sur la fonction fgets lorsqu'on dépasse le int maxLength
Bonjour,
Mon code source ci-dessous (extrêmement simple) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| /*
Le But du programme ci dessous est de demandé le nom et la taille de la personne.
On utilisera la fonction fgets() pour récupérer ses informations.
Cette méthode est toujours à privilégier car elle est sécurisé comparé à un scanf()
Regarder sur internet le prototype de la fonction fgets()
Pourquoi quand on dépasse le nombre max de caractere il n'y a pas d'erreur ?
*/
// BIBLIOTHEQUES :
//===================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//===================================================
// FONCTION PRINCIPALE MAIN (POINT D'ENTREE DU PROGRAMME) :
//===================================================
int main(void)
{
// DECLARATION DES VARIABLES :
//===================================================
char prenom[10];
printf("Comment t'appelles tu ?\n");
// 9 caracteres et pas 10 pour reserver le caractere fin de chaine = '\0'
if ((fgets(prenom, 9, stdin)) != NULL)
printf("Tu t'appelles : %s", prenom);
else
printf("Erreur de saisie\n");
// ATTENTION fgets NE LIE QUE DES CARACTERES PAS DES NOMBRE !
// Ainsi le symbole 1 n'est pas vu comme le chiffre 1 mais comme le caractère 1
// Utiliser les fonctions de conversion string to double ou string to int ou encore string to long pour résoudre le problème
char prix[10];
printf("Quel est ton prix ?\n");
if (fgets(prix, 9, stdin) != NULL)
printf("Ton prix est : %g\n", strtod(prix, NULL));
else
printf("Erreur de saisie\n");
return 0;
}
//=================================================== |
Lorsque je compile ce programme et que je dépasse la taille max de caractère (int maxLenght, voir le lien que je vous ai envoyé),
il n'y a pas d'erreur qui se déclenche et mon else ne sert à rien.
Je ne comprends pas pourquoi.
Avez vous une explication svp ?
Cordialement Zephyre