Accès rapide :
Gestion dynamique de la mémoire
Interaction avec le système d'exploitation
Quelques algorithmes.
Fonctions de prise en charge des encodages pour vos chaînes de caractères
Fonctions de conversions de chaînes de caractères en valeurs numériques
La librairie <stdlib.h>
(pour standard library) propose des fonctions pour répondre à différentes problématiques.
Tout d'abord, cette librairie vous permmettra de 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.
Cette librairie propose aussi un certain nombre d'autres fonctions utilitaires pour les convertions entre types de données,
des algorithmes (tri, recherche dichotomique, génération de nombres pseudo-aléatoires, ...) et quelques autres possibilités.
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.
Nom | Type | Description | Depuis |
---|---|---|---|
aligned_alloc | fonction | Alloue un bloc de mémoire en garantissant que son adresse mémoire soit multiple d'une taille d'alignement. | C11 |
calloc | fonction | Alloue un bloc de mémoire dans le tas (le heap, en anglais), en initialisant tous ces octets à la valeur 0. | C89 |
free | fonction | Libère un bloc de mémoire alloué dynamiquement dans le tas (le heap, en anglais), via un appel à la fonction malloc (ou tout autre fonction d'allocation mémoire). |
C89 |
malloc | fonction | Alloue un bloc de mémoire dans le tas (le heap, en anglais). | C89 |
realloc | fonction | Retaille un bloc de mémoire préalablement alloué via un appel à la fonction malloc (ou tout autre fonction d'allocation mémoire) |
C89 |
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, ...
Nom | Type | Description | Depuis |
---|---|---|---|
abort | fonction | La fonction abort arrête, de mainière « anormale », l'exécution du programme et déclenche le signal SIGABRT pour en informer l'appelant. |
C89 |
atexit | fonction | Permet d'ajouter une fonction qui sera exécutée en sortie du processus (du programme) en cours. | C89 |
at_quick_exit | fonction | Permet d'ajouter une fonction qui sera exécutée suite à un appel à la fonction quick_exit pour sortir du processus en cours. |
C11 |
exit | fonction | La fonction exit permet de mettre fin au programme en spécifiant un code de retour. | C89 |
_Exit | fonction | La fonction _Exit permet de mettre fin au programme, de manière normal, mais sans réaliser les tâches de finalisation du processus et sans invoquer auncune fonction enregistrée sur la sortie du procéssus. | C99 |
getenv | fonction | Renvoie le contenu d'une variable d'environnement du système d'exploitation. | C89 |
quick_exit | fonction | La fonction quick_exit permet de mettre fin rapidement au programme en spécifiant un code de retour. | C11 |
system | fonction | Exécute une commande sur le système d'exploitation hôte. | C89 |
Quelques autres définitions sont associées à ces fonctions.
Nom | Type | Description | Depuis |
---|---|---|---|
EXIT_FAILURE | Macro | Cette macro représente un code de sortie du processus en échec. | C89 |
EXIT_SUCCESS | Macro | Cette macro représente un code de sortie du processus en succès. | C89 |
De plus, n'oubliez pas que vous pouvez récupérer les arguments passés sur la ligne de commande à votre programme via les paramètres de la fonction main
(les paramètres argc
et argv
).
L'aléatoire est un concept qu'on a du mal à traiter en informatique, étant données que nos machines sont des systèmes déterministes.
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 système machine.
La librairie <stdlib.h>
propose deux fonctions pour ce sujet.
D'autres algorithmes sont aussi proposés par la librairie : recherche dichotomique, tri de tableaux d'entiers, ...
Nom | Type | Description | Depuis |
---|---|---|---|
abs | fonction | Permet de calculer la valeur absolue d'un entier signé. | C89 |
bsearch | fonction | La fonction bsearch (binary search) permet de réaliser une recherche dichotomique d'une valeur dans un tableau d'éléments triés. |
C89 |
div | fonction | Cette fonction réalise une division entière d'un dividende par un diviseur et vous renvoit le quotient et le reste de cette division. | C89 |
labs | fonction | Permet de calculer la valeur absolue d'un entier long signé. | C89 |
llabs | fonction | Permet de calculer la valeur absolue d'un entier très long signé (type long long ). |
C99 |
ldiv | fonction | Cette fonction réalise une division entière (de type long ) d'un dividende par un diviseur et vous renvoit le quotient et le reste de cette division. |
C89 |
lldiv | fonction | Cette fonction réalise une division entière (de type long long ) d'un dividende par un diviseur et vous renvoit le quotient et le reste de cette division. |
C89 |
qsort | fonction | Permet de trier un tableau d'éléments. Le type des éléments contenus dans le tableau est laissé à votre discretion. | C89 |
rand | fonction | Renvoie une valeur aléatoire comprise entre 0 et RAND_MAX. | C89 |
srand | fonction | Initialise le générateur de nombres pseudo-aléatoires. | C89 |
Quelques autres définitions sont associées à ces fonctions.
Nom | Type | Description | Depuis |
---|---|---|---|
div_t | structure | Cette structure permet de stocker le quotient et le reste d'une division entière, dans des champs de type int . |
C89 |
ldiv_t | structure | Cette structure permet de stocker le quotient et le reste d'une division entière, dans des champs de type long . |
C89 |
lldiv_t | structure | Cette structure permet de stocker le quotient et le reste d'une division entière, dans des champs de type long long . |
C99 |
RAND_MAX | macro |
S'expense en une valeur numérique représentant la plus grande valeur pouvant être renvoyée par le générateur de nombres pseudo-aléatoires
(la fonction rand ).
|
C89 |
Le langage C ISO permet de gérer des chaînes de caractères utilisant divers encodages. Assez souvent, nous utilisons un encodage relativement simple : un caractère est stocké sur un octet. C'est le cas des encodages ASCII ou ISO-8859-1. Ce dernier étant très souvent utilisé par défaut sur un système Windows configuré en français.
Mais ça peut être plus compliqué : un caractère peut être encodé sur plusieurs octets et il se peut même que pour deux caractères d'une même table d'encodage, la taille change. C'est notamment le cas de l'encodage UTF-8, une déclinaison d'Unicode.
setlocale
.
Vous pouvez définir des chaînes de caractères C utilisant l'encodage grâce au préfixe u8
, comme le montre l'exemple ci-dessous.
Pour injecter un caractère étendu dans une chaîne C, utilisez le préfixe \u
suivit du code hexadécimal du caractère souhaité.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <locale.h> #include <stdio.h> #include <stdlib.h> int main() { // On se place en mode UTF-8 pour gérer des caractères multi-octets. setlocale( LC_ALL, "en_US.utf8" ); // On crée une chaîne avec des caractères multi-octets en utilisant l'encodage UTF-8. const char * str = u8"\u03c0 est un sigle mathématique. \u4774 est un idéogramme chinois."; // On affiche notre chaîne de caractères encodée en UTF-8 printf( "%s\n", str ); return EXIT_SUCCESS; } |
Le résultat affiché sera : π est un sigle mathématique. 䝴 est un idéogramme chinois
.
Voici la liste des définitions proposées par <stdlib.h>
pour la gestion des encodages de chaînes de caractères.
Nom | Type | Description | Depuis |
---|---|---|---|
MB_CUR_MAX | macro | Renvoi la longueur maximale d'un caractère multi-octets dans la localisation courante. | C89 |
mblen | fonction | Permet de déterminer la taille, en nombre d'octets, du premier caractère d'une chaîne multi-octets. | C89 |
mbstowcs | fonction |
Permet de transformer une chaîne de caractères « multibytes » (de type char * ) en une chaîne de caractères « wide characters »
(de type wchar_t * ), dans la limite d'un nombre de caractères maximal à ne pas dépasser.
|
C89 |
mbtowc | fonction |
Permet de transformer un caractère « multibytes » (stocké sur un ou plusieurs octets) en un « wide characters »
(de type wchar_t ).
|
C89 |
wcstombs | fonction |
Permet de transformer une chaîne de caractères « wide characters » (de type wchar_t * ) en une chaîne de caractères « multibytes »
(de type char * ), dans la limite d'un nombre de caractères maximal à ne pas dépasser.
|
C89 |
wctomb | fonction | Permet de transformer un caractère « wide characters » (de type wchar_t ) en un caractère « multibytes » (stocké sur un ou plusieurs octets). |
C89 |
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
si la conversion s'est bien ou mal passée.
Nom | Type | Description | Type de destination | Depuis |
---|---|---|---|---|
atof | fonction | Conversion d'une chaîne de caractères en un flottant double précision. | double | C89 |
atoi | fonction | Conversion d'une chaîne de caractères en un entier. | int | C89 |
atol | fonction | Conversion d'une chaîne de caractères en un entier long. | long | C89 |
atoll | fonction | Conversion d'une chaîne de caractères en un entier très long. | long long | C99 |
strtod | fonction | Conversion d'une chaîne de caractères en un flottant double précision. | double | C89 |
strtof | fonction | Conversion d'une chaîne de caractères en un flottant simple précision. | float | C99 |
strtol | fonction | Conversion d'une chaîne de caractères en un entier long. | long | C89 |
strtold | fonction | Conversion d'une chaîne de caractères en un flottant double précision long. | long double | C99 |
strtoll | fonction | Conversion d'une chaîne de caractères en un entier très long. | long long | C99 |
strtoul | fonction | Conversion d'une chaîne de caractères en un entier long non signé. | unsigned long | C89 |
strtoull | fonction | Conversion d'une chaîne de caractères en un entier très long non signé. | unsigned long long | C99 |
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :