STRTOUL |
Chaîne à naturel long |
---|---|
Langage C++ | cstdlib (stdlib.h) |
Syntaxe
unsigned long strtoul(const char *str,char **endptr,int base) |
Paramètres
Nom | Description |
---|---|
str | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ contenant le nombre. |
endptr | Ce paramètre retourne un pointeur à la fin du nombre dans la chaîne de caractères ASCIZ. |
base | Ce paramètre permet d'indiquer la base numérique du nombre à extraire (1 à 36). |
Description
Cette fonction permet de convertir la chaîne de caractères en nombre de type non-signée «long».
Remarques
- La fonction strtoul() convertit la représentation sous le format d'une chaîne de caractères d'un nombre entreposé dans la chaîne de caractères pointée par str en un long non signé et renvoie le résultat. La base du nombre est déterminée par base. Si le paramètre base est zéro, la base est déterminée par des règles régissant la spécification constante. Si le base est spécifié, il doit être compris entre 2 et 36.
- La fonction strtoul() fonctionne comme suit. Tout d'abord, tout espace blanc dans la chaîne de caractères pointée par str est supprimé. Ensuite, chaque caractère comprenant le numéro est lu. Tout caractère ne pouvant pas faire partie d'un nombre entier long non signé entraînera l'arrêt de ce processus. Cette situation inclut les espaces blancs, la ponctuation et les caractères. Enfin, endptr est défini pour pointer vers le reste, le cas échéant, de la chaîne de caractères d'origine. Cela signifie que si la fonction strtoul() est appelé avec "100 gladir", la valeur 100L sera renvoyée et endptr pointera vers l'espace précédant "gladir".
- Si le résultat ne peut pas être représenté par un entier long non signé, la fonction strtoul() renvoie ULONG_MAX et la variable globale errno est définie sur ERANGE, indiquant une erreur d'intervalle. Si aucune conversion n'a lieu, zéro est renvoyé.
- Gestion des bases numériques : Comme pour strtol, le troisième paramètre base permet de spécifier la base numérique utilisée pour la conversion, pouvant varier de 2 à 36 ou être définie à 0 pour permettre à la fonction de déterminer la base automatiquement. Cela offre une grande flexibilité, notamment pour travailler avec des représentations hexadécimales ou octales. Par exemple, une chaîne avec un préfixe "0x" sera interprétée comme une valeur hexadécimale si base est 0.
- Utilisation de endptr pour gérer la conversion : Le paramètre endptr est un pointeur vers un pointeur de caractère qui, après l'appel à strtoul, pointe vers le premier caractère non converti dans la chaîne de caractères. Cela permet de détecter où la conversion s'est arrêtée, offrant ainsi un moyen de vérifier si la chaîne de caractères entière a été correctement convertie ou si des caractères non numériques ont été rencontrés.
- Gestion des erreurs de conversion : strtoul gère les erreurs de conversion en renvoyant ULONG_MAX en cas de débordement. Pour détecter ces situations, il est important de vérifier si endptr pointe vers le même caractère que str après l'appel à strtoul. Si aucune conversion n'a eu lieu (si la chaîne de caractères ne commence pas par un chiffre valide), la fonction renvoie 0 et endptr pointera vers str.
- Trimming des espaces blancs : Avant la conversion, strtoul ignore les espaces blancs initiaux dans la chaîne de caractères. Cela signifie que les chaînes de caractères contenant des espaces avant les chiffres sont gérées correctement. Par exemple, " 123" sera converti en 123, et les espaces initiaux ne causeront pas d'erreurs de conversion.
- Support des signes : Contrairement à strtol, strtoul ne prend pas en compte les signes. Il traite uniquement les chiffres non signés, ce qui signifie que les chaînes de caractères avec un signe + ou - ne fonctionneront pas comme prévu. Par exemple, si la chaîne est "-123", strtoul renverra 0, car elle ne considère pas les nombres négatifs. Cela souligne l'importance de s'assurer que les chaînes fournies représentent des nombres non signés.
- Utilisation avec des chaînes de caractères non numériques : Lorsque la chaîne fournie à strtoul contient des caractères non numériques, la fonction s'arrête à la première occurrence de ce caractère. Les caractères qui suivent ne sont pas traités, et la fonction renvoie la valeur convertie jusqu'à ce point. Par exemple, dans la chaîne "123abc", strtoul convertira "123" et endptr pointera vers "a".
- Alternatives et contexte d'utilisation : Bien que strtoul soit utile pour la conversion de chaînes en entiers non signés, il existe d'autres méthodes en C++ plus modernes et orientées objet, comme std::stoul, qui peuvent être utilisées pour des conversions similaires. std::stoul offre une syntaxe plus simple et gère également les exceptions pour les erreurs de conversion, ce qui peut être préférable dans un contexte C++ moderne.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :

- #include <iostream>
- #include <cstdlib>
-
- int main()
- {
- char *s, *sr;
- s = "0";
- std::cout << "0 = " << strtoul(s,&sr,10) << std::endl;
- s = "1";
- std::cout << "1 = " << strtoul(s,&sr,10) << std::endl;
- s = "123";
- std::cout << "123 = " << strtoul(s,&sr,10) << std::endl;
- s = "-123";
- std::cout << "-123 = " << strtoul(s,&sr,10) << std::endl;
- s = "G";
- std::cout << "G = " << strtoul(s,&sr,10) << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
0 = 01 = 1
123 = 123
-123 = 4294967173
G = 0
Voir également
Langage de programmation - C++ - Référence procédures et fonctions - atol
Langage de programmation - C++ - Référence procédures et fonctions - strtol
Langage de programmation - C - Référence procédures et fonctions - strtoul
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 735.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 270.
Dernière mise à jour : Lundi, le 3 août 2015