STRTOL |
Chaîne à entier long |
---|---|
Langage C++ | cstdlib (stdlib.h) |
Syntaxe
long strtol(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 «long».
Remarques
- La fonction strtol() 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 et renvoie le résultat. La base du nombre est déterminée par base. Si base est zéro, alors la base est déterminée par des règles régissant la spécification constante. Si base est différent de zéro, alors il doit être compris entre 2 et 36.
- La fonction strtol() 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 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 strtol() 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, la fonction strtol() renvoie LONG_MAX ou LONG_MIN et l'erreur globale 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 : Le troisième paramètre base permet de spécifier la base numérique utilisée pour la conversion. Les valeurs valides vont de 2 à 36, ou 0 pour que la base soit déterminée automatiquement à partir de la chaîne de caractères. Par exemple, si base est 16, strtol interprétera les chiffres hexadécimaux. Pour base 0, elle détectera automatiquement si la chaîne commence par "0x" pour l'hexadécimal ou "0" pour l'octal.
- 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 à strtol, pointe vers le premier caractère non converti dans la chaîne de caractères. Cela permet de savoir où la conversion s'est arrêtée, ce qui est particulièrement utile pour vérifier si la chaîne de caractères contenait uniquement des caractères numériques ou si des caractères non numériques ont été rencontrés.
- Gestion des erreurs de conversion : strtol gère les erreurs de conversion en renvoyant LONG_MIN ou LONG_MAX en cas de débordement. Pour détecter ces situations, il est essentiel de vérifier si endptr pointe vers le même caractère que str après l'appel à strtol. Si aucune conversion n'a eu lieu (c'est-à-dire que la chaîne ne commençait pas par un chiffre valide), la fonction renvoie 0, et endptr pointe vers str.
- Trimming des espaces blancs : Avant la conversion, strtol ignore les espaces blancs initiaux dans la chaîne de caractères. Cela signifie que les chaînes 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.
- Support des signes : strtol gère automatiquement les signes positif et négatif. Si la chaîne commence par un signe + ou -, il le prendra en compte lors de la conversion. Cela permet de convertir des chaînes comme "-123" ou "+456" en -123 et 456 respectivement, rendant la fonction très flexible pour différentes représentations de nombres.
- Utilisation avec des chaînes de caractères non numériques : Lorsque la chaîne fournie à strtol 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 de caractères "123abc", strtol convertira "123" et endptr pointera vers "a".
- Alternatives et contexte d'utilisation : Bien que strtol soit très utile pour la conversion de chaînes en entiers, il existe d'autres méthodes en C++ plus modernes et orientées objet, comme std::stoi, qui peut être utilisée pour des conversions similaires. std::stoi 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 = " << strtol(s,&sr,10) << std::endl;
- s = "1";
- std::cout << "1 = " << strtol(s,&sr,10) << std::endl;
- s = "123";
- std::cout << "123 = " << strtol(s,&sr,10) << std::endl;
- s = "-123";
- std::cout << "-123 = " << strtol(s,&sr,10) << std::endl;
- s = "G";
- std::cout << "G = " << strtol(s,&sr,10) << std::endl;
- return 0;
- }
on obtiendra le résultat suivant :
0 = 01 = 1
123 = 123
-123 = -123
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 - strtoul
Langage de programmation - C - Référence procédures et fonctions - strtol
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 269.
Dernière mise à jour : Lundi, le 3 août 2015