Différences entre les versions de « Programmation C/Erreurs »

397 octets supprimés ,  il y a 15 ans
 
== Exemple ==
Pour illustrer cela, voici un exemple, qui tente de convertir une chaine de caractères en un nombre. Le nombre donné, 2<sup>64</sup>, peut ne pas être dans le domaine de valeur du type '''unsigned long''' (qui peut se limiter à 2<sup>32</sup> - 1), suivant l'implémentation qui est utilisée pour l'exécuterarchitecture. Dans ce cas, on utilise '''errno''' pour afficher un message d'erreur approprié à l'utilisateur.
 
<pre>
#include <stdlib.h> /* strtoul() */
#include <limits.h> /* ULONG_MAX */
#include <errnostring.h> /* errno et ERANGEstrerror() */
#include <errno.h> /* errno */
 
void teste(const char *nombre)
{
/* il y a eu une erreur ! */
printf("Impossible de convertir le nombre '%s': %s.\n", nombre, strerror(errno));
if (errno == ERANGE)
{
/* on sait quelle est l'erreur */
puts("L'erreur rencontree est une erreur de domaine.");
}
else
{
/* pas d'information précise à fournir à l'utilisateur */
puts("Une erreur a ete rencontree.");
}
}
else
{
printf("La conversion a eteété effectueeeffectuée, et la valeur est: %ld\n", res);
}
}
ULONG_MAX vaut 4294967295l.
La conversion a ete effectuee, et la valeur est: 256
Impossible de convertir le nombre '18446744073709551616': la valeur est en dehors de l'intervalle du type spécifié.
L'erreur rencontree est une erreur de domaine.
 
Il est nécessaire de placer '''errno''' à 0 ''avant'' d'utiliser '''strtoul''', car les fonctions de la bibliothèque standard ne sont pas obligées de la mettre à zéro en cas de succès. À cause de celà, siSi on ne la réinitialisait pas «&nbsp;manuellement&nbsp;», on pourrait voir le résultat d'une erreur précédente, causée par uneun autreappel de fonction antérieur. C'est une des lourdeurs du modèle de gestion d'erreur du C.., même si une telle paranoïa n'est pas toujours nécessaire.
 
'''Note&nbsp;:''' Le contrôle d'erreur des fonctions '''strto*''' est en réalité plus complexe, puisque le deuxième paramètre permet un contrôle plus fin. Il n'est pas utilisé ici, pour se concentrer sur '''errno''', mais devrait l'être dans un vrai programme.
 
== Erreurs possibles ==
605

modifications