Programmation C source/erreurs
Apparence
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <limits.h>
int main(void)
{
printf("----------------------------------------\n");
printf(" 1. Utilisation\n");
printf("----------------------------------------\n");
/*
Pour gérer les erreurs, nous avons
errno.h
cet en-tête déclare notamment une variable globale errno
et un certain nombre de codes d'erreur, qui permettent
aux fonctions de la bibliothèque standard de reporter
précisément la cause d'une erreur.
errno est de type int
remarque : errno peut être définie par une macro ou un identificateur.
N'essayez pas de récupérer son adresse.
pour utiliser errno
il faut mettre errno à 0 avant d'utiliser la fonction qui peut échouer
puis tester si la fonction a échoué
remarque : chaque fonction indique à sa façon qu'elle a échoué
et enfin en cas d'echec utiliser errno
*/
printf("\n----------------------------------------\n");
printf(" 2. Affichage d'un message d'erreur\n");
printf("----------------------------------------\n");
#if 0
#include <string.h>
char * strerror(int code);
#endif
/*
Cette fonction permet de connaître la signification textuelle d'une valeur de
errno. À noter que pour la chaine retournée, il est sage de présupposer qu'elle a
une durée de vie la plus courte possible. N'essayez pas de modifier le contenu
de la chaîne, affichez-la directement ou copiez-la dans une zone temporaire.
Un autre intérêt de passer par cette fonction est que les messages retournés sont
adaptés à la localisation (langue) du système.
*/
#if 0
#include <errno.h>
void perror(const char *chaine);
#endif
/*
perror, permet d'envoyer le message correspondant à errno sur le flux des erreurs
stderr. Le paramètre chaine, s'il est différent de NULL, est une chaine de
caractère passée par le programmeur et affichée avant le message d'erreur.
*/
printf("\n----------------------------------------\n");
printf(" 3. Exemple\n");
printf("----------------------------------------\n");
char * chaineInvalide;
unsigned long int variable = strtoul("12345invalide", &chaineInvalide, 10);
printf("variable = %lu\n", variable);
printf("%s\n", chaineInvalide);
errno = 0;
variable = strtoul("12345678901234567890", &chaineInvalide, 10);
if (variable == ULONG_MAX && errno != 0)
perror("ERREUR strtoul()");
return 0;
}