Référence du fichier stdlib.h


Description détaillée

Définitions et déclarations diverses. Un autre entête contient aussi un pot pourri de définitions (stddef.h>) mais stdlib.h ne doit être disponible que dans les implémentations ébergées (hosted) tandis que stddef.h doit être disponible aussi dans les implémentations sans environnement (freestanding).


Structures de données

struct  div_t
 type du résultat de div() Plus de détails...
struct  ldiv_t
 type du résultat de ldiv() Plus de détails...

Macros

#define NULL
 pointeur nul
#define EXIT_FAILURE
 fin anormale du programme
#define EXIT_SUCCESS
 fin normale du programme
#define RAND_MAX
 nombre aléatoire maximal
#define MB_CUR_MAX
 Taille maximale d'un caractère multibyte.

Définition de type

typedef __unsigned size_t
 taille des objets
typedef __integral wchar_t
 caractère large

Fonctions

double atof (const char *s)
 convertion en double
int atoi (const char *s)
 convertion en int
long atol (const char *s)
 convertion en long
double strtod (const char *s, char **endptr)
 conversion en double
long strtol (const char *s, char **endptr, int base)
 conversion en long
unsigned long strtoul (const char *s, char **endptr, int base)
 conversion en unsigned long
int rand (void)
 nombre pseudo-aléatoire
void srand (unsigned graine)
 initialisation d'une séquence pseudo-aléatoire
void * calloc (size_t nelts, size_t eltsize)
 allocation et initialisation de mémoire dynamique
void free (void *ptr)
 libération de la mémoire
void * malloc (size_t size)
 allocation de mémoire dynamique
void * realloc (void *ptr, size_t size)
 réallocation de mémoire
void abort (void)
 fin anormale
int atexit (void(*func)(void))
 enregistrement d'un gestionnaire de fin normale du programme
void exit (int status)
 fin normale du programme
char * getenv (const char *name)
 lecture de l'environnement
int system (const char *s)
 exécute d'une commande
void * bsearch (const void *key, const void *base, size_t nelts, size_t eltsize, int(*compar)(const void *, const void *))
 recherche par dichotomie
void qsort (void *base, size_t nelts, size_t eltsize, int(*compar)(const void *, const void *))
 tri
int abs (int i)
 valeur absolue
div_t div (int num, int denom)
 division
long labs (long i)
 valeur absolue
ldiv_t ldiv (long num, int denom)
 division
int mblen (const char *s, size_t n)
 taille d'un caractère multibyte
int mbtowc (wchar_t *dst, const char *src, size_t n)
 conversion d'un caractère multibyte en caractère large
int wctomb (char *dst, wchar_t ch)
 conversion d'un caractère large en caractère multibyte
size_t mbstowcs (wchar_t *dst, const char *src, size_t n)
 conversion d'une chaîne de caractères multibytes en chaîne de caractères larges
size_t wcstombs (char *dst, const wchar_t *src, size_t n)
 conversion d'une chaîne de caractères larges en chaîne de caractères multibytes


Documentation des macros

#define EXIT_FAILURE

Expression entière qui, utilisée comme argument de exit(), permet de signaler une fin anormale du programme.

#define EXIT_SUCCESS

Expression entière qui, utilisée comme argument de exit(), permet de signaler une fin normale du programme.

Note:
Ce n'est pas obligatoirement 0 même si 0 peut servir à signaler une fin normale.

#define MB_CUR_MAX

Le nombre maximal de bytes dans un caractère multibyte pour toutes la locale courante.

Note:
La taille maximale pour toutes les locales supportées par l'implémentation est donnée par MB_LEN_MAX.

#define NULL

Cette macro contient une constante de pointeur nul. Des valeurs populaires sont 0, 0L, (void*)0.

Voir stddef.h pour plus d'informations.

#define RAND_MAX

Expression entière constante indiquant la valeur maximale retournée par rand().


Documentation des définition de type

typedef __unsigned size_t

Ce type entier non signé est capable de contenir la taille des objets.

Voir stddef.h pour plus d'informations.

typedef __integral wchar_t

Ce type entier est capable de représenter tous les codes pour le charset le plus étendu parmi les charsets des locales supportées.

Voir stddef.h pour plus d'informations.


Documentation des fonctions

void abort ( void   ) 

Cette fonction ne retourne pas et cause la fin anormale du programme à moins que le signal SIGABRT est attrapé et que le gestionnaire du signal ne retourne pas. Une indication d'échec est transmise au système d'exploitation.

Note:
Les gestionnaires enregistrés par atexit() ne sont pas exécutés.

int abs ( int  i  ) 

Calcule la valeur absolue de i. Si celle-ci n'est pas représentable, le comportement est indéfini.

Retourne
la valeur absolue de i.

int atexit ( void(*)(void)  func  ) 

Enregistre une fonction qui sera appelée lors de la fin normale du programme (par un appel à exit() ou par retour de main()). Ces fonctions ne peuvent pas appeler exit().

Retourne
0 en cas de succès, une valeur non nulle en cas d'échec.

Note:
les implémentations doivent permettre l'enregistrement d'au moins 32 fonctions.

double atof ( const char *  s  ) 

Converti le début de la chaîne pointée par s en un double. À part pour la gestion d'erreur (le comportement d'atof() est indéfini quand la valeur ne peut pas être représentée), c'est équivalent à

strtod(s, (char**)NULL);

Note:
strtod() devrait toujours être utilisé à la place de atof().

int atoi ( const char *  s  ) 

Converti le début de la chaîne pointée par s en un int. À part pour la gestion d'erreur (le comportement d'atoi() est indéfini quand la valeur ne peut pas être représentée), c'est équivalent à

(int)strtol(s, (char**)NULL, 10);

Note:
strtol() devrait toujours être utilisé à la place de atoi().

long atol ( const char *  s  ) 

Converti le début de la chaîne pointée par s en un long. À part pour la gestion d'erreur (le comportement d'atol() est indéfini quand la valeur ne peut pas être représentée), c'est équivalent à

strtol(s, (char**)NULL, 10);

Note:
strtol() devrait toujours être utilisé à la place de atol().

void* bsearch ( const void *  key,
const void *  base,
size_t  nelts,
size_t  eltsize,
int(*)(const void *, const void *)  compar 
)

Recherche dans un tableau de nelts éléments de taille eltsize pointé par base, un élément égal à la valeur pointée par key. La fonction compar est utilisée pour effectuer la comparaison et doit retourner un entier plus petit, égal ou plus grand que zéro si la valeur pointée par son premier argument doit être considérée comme plus petite, égale ou plus grande que la valeur pointée par son second argument.

Le tableau doit être composé dans l'ordre des éléments inférieurs, égaux ou supérieurs à la clé. En pratique, il est donc trié.

Retourne
un pointeur vers un élément égal à la clé, ou un pointeur nul en l'absence d'éléments égaux à la clé.

void* calloc ( size_t  nelts,
size_t  eltsize 
)

Alloue assez de mémoire pour y mettre un tableau de nelts éléments de taille eltsize. Cette mémoire est correctement alignée pour pouvoir y placer des éléments de n'importe quel type de taille inférieure ou égale à size. Cette mémoire est initialisée avec tous les bits à 0 (ce qui n'implique pas une valeur nulle pour les types flottants et les pointeurs).

Retourne
un pointeur vers la mémoire allouée si l'allocation réussit, un pointeur nul sinon.

div_t div ( int  num,
int  denom 
)

Calcule le résultat et le reste de la division de num par denom. Le quotient est stocké dans le membre quot du résultat, le reste dans le membre rem. On a l'égalité suivante: quot * denom + rem = num. Le reste est inférieur en valeur absolue au diviseur et même signe que denom, le quotient est en valeur absolue à la valeur absolue du quotient réel de num par denom.

Note:
Si les résultats des opérateurs % et / garantissent aussi que (num / denom) * denom + num % denom = num et que num % denom soitinférieur à denom en valeur absolue, il n'y a pas de contrainte sur le signe de num % denom qui peut donc être celui de denom.

void exit ( int  status  ) 

Cette fonction en retourne pas et cause la fin normale du programme.

Tout d'abord les fonctions enregistrées par atexit() sont appelées, dans l'ordre inverse de leur enregistrement.

Ensuite les données non encore écrite des tampons des flux en sortie sont écrites, tous les flux ouverts sont fermés et les fichiers créés par tmpfile() sont effacés.

Ensuite si la valeur de status est 0 ou EXIT_SUCCES, le programme est terminé avec une indication de réussite, si la valeur de status est EXIT_FAILURE, le programme est terminé avec une indication d'échec, si la valeur de status est autre, le programme est terminé avec une indication d'état définie par l'implémentation.

void free ( void *  ptr  ) 

Libère la mémoire pointée par ptr, qui doit être un pointeur retourné par calloc(), malloc() ou realloc() qui n'a pas encore été libéré par free() ou par realloc(). La mémoire ainsi libérée pourra être utilisée pour des allocations ultérieures (il est possible mais relativement rare que la mémoire soit rendue au système d'exploitation).

char* getenv ( const char *  name  ) 

Retourne
un pointeur vers la chaîne correspondant au nom name dans l'environnement ou un pointeur nul si l'environnement n'a pas de chaîne associée au nom name.

long labs ( long  i  ) 

Calcule la valeur absolue de i. Si celle-ci n'est pas représentable, le comportement est indéfini.

Retourne
la valeur absolue de i.

ldiv_t ldiv ( long  num,
int  denom 
)

Calcule le résultat et le reste de la division de num par denom. Le quotient est stocké dans le membre quot du résultat, le reste dans le membre rem. On a l'égalité suivante: quot * denom + rem = num. Le reste est inférieur en valeur absolue au diviseur et même signe que denom, le quotient est en valeur absolue à la valeur absolue du quotient réel de num par denom.

Note:
Si les résultats des opérateurs % et / garantissent aussi que (num / denom) * denom + num % denom = num et que num % denom soitinférieur à denom en valeur absolue, il n'y a pas de contrainte sur le signe de num % denom qui peut donc être celui de denom.

void* malloc ( size_t  size  ) 

Alloue size bytes de mémoire, correctement allignés pour y mettre un objet de n'importe quel type de taille inférieure ou égale à size.

Retourne
un pointeur vers la mémoire allouée si l'allocation réussit, un pointeur nul sinon.

int mblen ( const char *  s,
size_t  n 
)

Retourne
Si s est un pointeur nul, retourne une valeur non nulle ou zéro suivant que l'encodage des caractères multibytes dépende ou pas d'un état.

Si s n'est pas un pointeur nul, retourne 0 si s pointe vers le caractère nul; retourne le nombre de bytes du caractères multibyte pointé par s si celui-ci est bien valide et fait moins de n bytes ou -1 si les n premiers bytes ne forment pas un caractère multibyte valide.

Note:
mlen() utilise un état interne dans le cas où le codage utilisé pour les caractères multibytes en a besoin. Aucune autre fonction de la bibliothèque standard ne modifie cet état.

Je ne connais aucun moyen de ramener l'état interne dans l'état initial.

size_t mbstowcs ( wchar_t dst,
const char *  src,
size_t  n 
)

Converti une chaîne de caractères multibytes, commencant dans l'état initial, pointée par src en une chaîne de caractères larges stockée dans le tableau de n éléments pointés par dst.

Retourne
(size_t) -1 si si la chaîne pointée par src contient une séquence invalide

le nombre de caractères larges écrits (non compris le caractère nul final) sinon.

Note:
Si le tableau est trop petit, aucun caractère nul n'est écrit.

int mbtowc ( wchar_t dst,
const char *  src,
size_t  n 
)

Converti un caractère multibyte pointé par src en un caractère large stocké dans *dst si dst est non nul et que le caractère est valide.

Retourne
Si s est un pointeur nul, retourne une valeur non nulle ou zéro suivant que l'encodage des caractères multibytes dépende ou pas d'un état.

Si s n'est pas un pointeur nul, retourne 0 si s pointe vers le caractère nul; retourne le nombre de bytes du caractères multibyte pointé par s si celui-ci est bien valide et fait moins de n bytes ou -1 si les n premiers bytes ne forment pas un caractère multibyte valide.

Note:
mbtowc() utilise un état interne dans le cas où le codage utilisé pour les caractères multibytes en a besoin. Aucune autre fonction de la bibliothèque standard ne modifie cet état.

Je ne connais aucun moyen de ramener l'état interne dans l'état initial.

void qsort ( void *  base,
size_t  nelts,
size_t  eltsize,
int(*)(const void *, const void *)  compar 
)

Trie dans l'ordre croissant un tableau de nelts éléments de taille eltsize pointé par base. L'ordre est déterminé par la fonction compar qui doit retourner un entier plus petit, égal ou plus grand que zéro si la valeur pointée par son premier argument doit être considérée comme plus petite, égale ou plus grande que la valeur pointée par son second argument.

int rand ( void   ) 

Les appels successifs à rand() renvoie des nombres dans l'intervalle 0 à RAND_MAX formant une séquence pseudo-aléatoire.

Retourne
le nombre suivant dans une séquence pseudo-aléatoire. Cette valeur dépend donc uniquement de l'argument graine passé au dernier appel à srand() et du nombre d'appel à rand() ayant eu lieu depuis.

Note:
L'implémentation doit se comporter comme si aucune fonction de la bibliothèque n'appellait rand().

void* realloc ( void *  ptr,
size_t  size 
)

Change la taille de la mémoire allouée à ptr en size. Si le changement réussit, le pointeur retourné pointe vers une zone mémoire de taille size dont le début (jusqu'au plus petit de l'ancienne et de la nouvelle taille) a le même contenu que la zone pointée par ptr.

Si l'allocation échoue, la mémoire pointée par ptr n'est pas libérée et est inchangée.

Si ptr est nul, se comporte comme malloc().

ptr doit être un pointeur retourné par malloc(), calloc() ou realloc() et pas encore libéré par un appel à free() ou à realloc().

Retourne
un pointeur vers la mémoire allouée si le changement de taille réussit, un pointeur nul sinon.

void srand ( unsigned  graine  ) 

graine sert à déterminer la séquence pseudo-aléatoire dont les éléments sont retournés par rand().

double strtod ( const char *  s,
char **  endptr 
)

Converti le début de la chaîne pointée par s en un double et, si endptr n'est pas nul, place dans *endptr un pointeur vers le premier caractère non utilisé.

Le format reconnu est décrit par l'expression régulière (au format des expressions régulières étendues de POSIX) suivante:

^[[:space:]]*[+-]?([0-9]+.[0-9]*|.[0-9]+)([eE][+-]?[0-9]+)

Retourne
la valeur convertie. Si aucune conversion n'a pu avoir lieu, 0. Si la valeur qui aurait dû être convertie est hors de l'intervalle représentable, HUGE_VAL et ERANGE est stocké dans errno. Si un underflow a lieu, 0 et ERANGE est stocké dans errno.

Note:
Cette fonction dépend de la locale en cours de deux manières: le séparateur décimal d'une part, d'autre part d autres formats que celui donné ci-dessus peuvent être acceptés.

long strtol ( const char *  s,
char **  endptr,
int  base 
)

Converti le début de la chaîne pointée par s en un long et, si endptr n'est pas nul, place dans *endptr un pointeur vers le premier caractère non utilisé.

Si la base n'est pas nulle, le format reconnu est une séquence, éventuellement vide, de blancs, un signe (+ ou -) optionel suivit d'une séquence de chiffres en base base (les lettres a à z étant considérés comme les chiffres 10 à 35). Si la base est 16, la séquence 0x ou 0X peut se trouver avant les chiffres.

Si la base est nulle, le format est celui des constantes entières du C, précédée éventuellement d'un signe (+ ou -).

Retourne
la valeur convertie. Si aucune conversion n'a pu avoir lieu, 0. Si la valeur qui aurait dû être convertie est hors de l'intervalle représentable, LONG_MAX ou LONG_MIN suivant le signe et ERANGE est stocké dans errno.

unsigned long strtoul ( const char *  s,
char **  endptr,
int  base 
)

Converti le début de la chaîne pointée par s en un unsigned long et, si endptr n'est pas nul, place dans *endptr un pointeur vers le premier caractère non utilisé.

Si la base n'est pas nulle, le format reconnu est une séquence, éventuellement vide, de blancs, un signe (+ ou -) optionel suivit d'une séquence de chiffres en base base (les lettres a à z étant considérés comme les chiffres 10 à 35). Si la base est 16, la séquence 0x ou 0X peut se trouver avant les chiffres.

Si la base est nulle, le format est celui des constantes entières du C, précédée éventuellement d'un signe (+ ou -).

Retourne
la valeur convertie. Si aucune conversion n'a pu avoir lieu, 0. Si la valeur qui aurait dû être convertie est hors de l'intervalle représentable, LONG_MAX ou LONG_MIN suivant le signe et ERANGE est stocké dans errno.

int system ( const char *  s  ) 

La chaîne s est passée à un interpréteur de commandes pour être exécutée.

Retourne
Si s est un pointeur nul, une valeur non nulle si un interpréteur de commande est disponible, une valeur nulle sinon.
Si s n'est pas un pointeur nul, une valeur dépendante de l'implémentation.

size_t wcstombs ( char *  dst,
const wchar_t src,
size_t  n 
)

Converti une chaîne de caractères larges pointée par src en une chaîne de caractères multibytes commencant dans l'état initial sockée dans le tableau de n bytes pointé par dst.

Retourne
(size_t) -1 si la chaîne contient un code invalide

le nombre de bytes écrits (non compris le caractère nul final) sinon.

Note:
Si le tableau est trop petit, aucun caractère nul n'est écrit.

int wctomb ( char *  dst,
wchar_t  ch 
)

Converti le caractère large ch en un caractère multibyte stocké dans *dst, si dst n'est pas un pointeur nul.

Retourne
si dst est un pointeur nul, retourne une valeur non nulle ou zéro suivant que l'encodage des caractères multibytes dépende ou pas d'un état.

si dst n'est pas un pointeur nul, retourne -1 si la valeur de ch n'est pas un caractère valide, retourne le nombre de bytes dans la représentation multibyte si ch est un caractère valide.

Note:
La représentation multibyte n'a pas plus de MB_CUR_MAX bytes.
wctomb() utilise un état interne dans le cas où le codage utilisé pour les caractères multibytes en a besoin. Aucune autre fonction de la bibliothèque standard ne modifie cet état.

Je ne connais aucun moyen de ramener l'état interne dans l'état initial.


Copyright © 2008 -- 2009 Jean-Marc Bourguet Accueil Pages sur le C