Aller au contenu

Programmation C source/erreurs

Un livre de Wikilivres.
Programmation C source
Programmation C++
Programmation C++
Sommaire
Modifier ce modèle
#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;
}