La librairie <stdlib.h> (<cstdlib> en C++)

Dans ce nouveau document, nous allons voir que la librairie stdlib (pour standard library) permet principalement deux types de traitements. Tout d'abord, via cette librairie, vous allez pouvoir gérer la mémoire dynamiquement, en allouant ou libérant de la mémoire dans le tas (le heap en anglais). Elle vous permettra aussi de pouvoir interagir avec le système d'exploitation sur lequel le programme s'exécute.

En plus de ces deux types de traitements, cette librairie propose un certain nombre d'autres fonctions utilitaires.

Gestion dynamique de la mémoire

Un ensemble de fonctions standards permettent de gérer la mémoire. En règle générale, il vous faudra allouer des espaces de mémoires pour les besoins de votre programme. Mais dans ce cas, il faudra obligatoirement penser à la libérer après utilisation (sans quoi des fuites mémoire apparaissent au sein de votre programmes). Le tableau ci-dessous rappelle les fonctions utilisables.

Interaction avec le système d'exploitation

D'autres fonctions existent au sein de cette librairie. Certaines d'entre elles permettent, notamment, de dialoguer avec le système d'exploitation hôte. Vous pouvez, par exemples, manipuler les variables d'environnement, demander l'exécution d'autres programmes, renvoyer un code de retour au système hôte, ...

N'oubliez pas que vous pouvez récupérer des données provenant du système, via les paramètres de la fonctions main (argc, argv).

Génération de valeurs aléatoires.

L'aléa est un concept qu'on a du mal à traiter en informatique. Actuellement, l'aléa est simulé via des algorithmes mathématiques qui renvoient des suites de valeurs. Si ces algorithmes sont utilisés plusieurs fois à la suite, ils ont le défaut de toujours renvoyer la même suite de valeurs. Pour contourner ce problème, on initialise souvent ces algorithmes avec une valeur imprédictible : pourquoi pas le temps machine écoulé. Voici les fonctions relatives à ce sujet :


Fonctions de conversions de chaînes de caractères en valeurs numériques

Les fonctions suivantes permettent de convertir des chaînes de caractères (char *) en valeurs numériques de différents types (int, long, double, ...). Attention, certaines de ces fonctions ne permettent pas de savoir si la conversion s'est bien passées : par exemple, la fonction atoi (Ascii TO Integer) renverra 0 si vous l'invoquez ainsi : int value = atoi( "toto" );. Comment distinguer ce cas de l'appel suivant : int value = atoi( "0" );. C'est pour cette raison, que je vous conseille plutôt l'emploi des fonctions commençant pas str : elles permettent de savoir que la conversion s'est mal passée.

Nom de la fonction C99 ISO/C++11 ISO Explication Type de données
atof Conversion d'une chaîne de caractères en un flottant double précision. double
atoi Conversion d'une chaîne de caractères en un entier. int
atol Conversion d'une chaîne de caractères en un entier long. long
atoll C99/C++11 Conversion d'une chaîne de caractères en un entier très long. long long
strtod Conversion d'une chaîne de caractères en un flottant double précision. double
strtof C99/C++11 Conversion d'une chaîne de caractères en un flottant simple précision. float
strtol Conversion d'une chaîne de caractères en un entier long. long
strtold C99/C++11 Conversion d'une chaîne de caractères en un flottant double précision long. long double
strtoll C99/C++11 Conversion d'une chaîne de caractères en un entier très long. long long
strtoul Conversion d'une chaîne de caractères en un entier long non signé. unsigned long
strtoull C99/C++11 Conversion d'une chaîne de caractères en un entier très long non signé. unsigned long long

Autres fonctionnalités utiles

Enfin, il existe quelques autres fonctions utilitaires dans cette librairie. En voici la liste