strtoul

Autres langues

Langue: fr

Version: 30 mai 2002 (fedora - 16/08/07)

Section: 3 (Bibliothèques de fonctions)

NOM

strtoul, strtoull, strtouq - Convertir une chaîne en entier long non-signé.

SYNOPSIS

#include <stdlib.h>
unsigned long int strtoul (const char *nptr, char **endptr,
int base)
unsigned long long int
strtoull(const char *nptr, char **endptr, int base);

DESCRIPTION

La fonction strtoul() convertit la chaîne nptr en un entier long en fonction de l'argument base, qui doit être dans l'intervalle 2 à 36 (bornes comprises), ou avoir la valeur spéciale 0.

La chaîne peut commencer par un nombre quelconque d'espaces ou de caractères interprétés comme tels par isspace(3). Un signe éventuel « + » ou « - » peut suivre. Si base vaut 0 ou 16, la chaîne peut inclure un préfixe « 0x » et le nombre sera interprété en base 16. Sinon, une base valant zéro est interprétée comme 10 (décimale) sauf si le caractère suivant est « 0 », auquel cas la base est 8 (octale).

Le reste de la chaîne est converti en une valeur entière longue, en s'arrêtant au premier caractère qui ne soit pas un chiffre valide. Dans les bases supérieures à 10, la lettre « A » (majuscule ou minuscule) représente 10, « B » représente 11, et ainsi de suite jusqu'à « Z » représentant 35.

Si endptr n'est pas NULL, strtoul() stocke l'adresse du premier caractère invalide dans *endptr. S'il n'y avait aucun chiffre valide, strtoul() stocke la valeur originale de nptr dans *endptr. (Donc, si *nptr n'est pas « \0 » et si **endptr vaut « \0 » en retour, la chaîne entière est valide.)

La fonction strtoull() travaille comme strtoul() mais renvoie une valeur entière « long long » non signée.

VALEUR RENVOYÉE

La fonction strtoul() renvoie soit le résultat de la conversion, soit, s'il y avait un signe moins, l'inverse du résultat de la conversion représentée comme une valeur non signée, à moins que la valeur originale provoque un débordement, auquel cas strtoul() renvoie ULONG_MAX et errno contient le code d'erreur ERANGE. La même chose est vraie pour strtoull() avec ULLONG_MAX à la place de ULONG_MAX.

ERREURS

EINVAL
(pas dans C99) La base indiquée n'est pas supportée.
ERANGE
La chaîne donnée est hors limites. La valeur a été arrondie.

L'implémentation peut aussi mettre errno à EINVAL si aucune conversion n'a été réalisée (pas de chiffres trouvés, et renvoyé zéro).

NOTES

Puisque strtoul() peut légitimement renvoyer 0 ou LONG_MAX (LLONG_MAX pour strtoull()) en cas d'échec ou de succès, le programme appelant devrait écrire 0 dans errno avant l'appel et déterminer si une erreur est survenue en vérifiant si errno a une valeur non nulle après l'appel.

Dans des localisations autre que « C », d'autres chaînes peuvent être acceptées. (Par exemple, un signe séparateur de milliers peut être accepté).

BSD a aussi

u_quad_t
strtouq(const char *nptr, char **endptr, int base);
avec une définition exactement analogue. Suivant l'architecture, cela peut être équivalent à strtoull() ou strtoul().

CONFORMITÉ

stroul() : SVr4, C99 et POSIX-2001. strtoull() : C99 et POSIX.1-2001.

EXEMPLE

Voir l'exemple de la page de manuel strtol(3) ; l'utilisation des fonctions décrites dans cette page de manuel est similaire.

VOIR AUSSI

atof(3), atoi(3), atol(3), strtod(3), strtol(3)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 10 novembre 1996 et révisée le 14 août 2006.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 strtoul ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.