STRTOL |
Chaine à entier long |
---|---|
Langage C | stdlib.h |
Syntaxe
long strtol(const char *str1,char **fin,int base); |
Paramètres
Nom | Description |
---|---|
str1 | Ce paramètre permet d'indiquer la chaîne de caractères ASCIZ contenant le nombre. |
fin | 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».
Algorithme
MODULE STRTOL(str, fin, base) Ignorer les espaces blancs au début de str SI str commence par "0x" ou "0X" ALORS Définir la base à 16 (hexadécimal) SINON SI str commence par "0" ALORS Définir la base à 8 (octale) SINON Utiliser la base fournie ou 10 par défaut (décimale) FIN SI résultat ← 0 initialiser un signe à +1 SI un signe + ou - est trouvé ALORS Mémoriser le signe SINON Considérer le signe comme positif FIN SI BOUCLE POUR CHAQUE caractère ch dans str FAIRE Convertir ch en sa valeur numérique (valeur de 0 à 9 ou A à F selon la base) SI la valeur de ch est valide pour la base donnée ALORS Ajouter cette valeur au résultat SINON Sortir de la boucle FIN SI FIN BOUCLE POUR CHAQUE SI fin est non NULL ALORS Assigner à fin l'adresse du caractère suivant le dernier caractère traité FIN SI RETOURNE le résultat multiplié par le signe |
Remarques
- Paramètre base et flexibilité : Le paramètre base permet de spécifier la base de numération utilisée pour la conversion. Elle peut être 10 pour la notation décimale, 16 pour la notation hexadécimale, ou 8 pour la notation octale. Si base est 0, strtol déduira automatiquement la base en fonction de la chaîne de caractères. Par exemple, si la chaîne de caractères commence par "0x", la base sera 16 (hexadécimale), sinon elle sera 10 (décimale).
- Pointeur fin et suivi de la conversion : Le paramètre fin est un pointeur vers un pointeur de caractère. Après l'appel de strtol, *fin pointe vers le premier caractère non analysé de la chaîne de caractères. Si toute la chaîne de caractères a été convertie avec succès, *fin pointera vers la fin de la chaîne de caractères. Cela permet de traiter les chaînes de caractères contenant des valeurs supplémentaires après un nombre, ou de détecter si la conversion a échoué.
- Gestion des erreurs : Si la chaîne de caractères ne contient pas de nombre valide au début, strtol renverra 0 et fin pointera vers la chaîne de caractères d'origine. Si la valeur numérique dans la chaîne de caractères est trop grande pour être entreposée dans un long int (soit positive ou négative), la fonction renverra LONG_MAX ou LONG_MIN respectivement, et la variable errno sera définie sur ERANGE pour indiquer un dépassement de capacité.
- Conversion robuste et gestion des espaces blancs : strtol ignore automatiquement les espaces blancs au début de la chaîne avant de commencer la conversion. Cela permet à la fonction de traiter des chaînes qui contiennent des espaces inutiles ou des tabulations avant les chiffres sans affecter la conversion. Elle commence la conversion dès qu'un caractère valide est rencontré, et s'arrête dès qu'un caractère invalide (non numérique) est trouvé.
- Support de notations spécifiques : strtol prend en charge des notations spécifiques comme les préfixes "0x" ou "0X" pour les nombres hexadécimaux et "0" pour les nombres octaux. Cela signifie que la chaîne de caractères "0x1a3" sera interprétée comme un nombre hexadécimal, tandis que "017" sera traité comme un nombre octal. Cette capacité permet une conversion flexible de chaînes représentant des nombres dans des formats différents.
- Comportement avec des chaînes de caractères invalides : Si la chaîne ne commence pas par un nombre valide, strtol renverra zéro et mettra à jour *fin pour pointer vers le début de la chaîne de caractères. Par exemple, si la chaîne est "abc", la conversion échouera et la fonction retournera 0, avec *fin pointant sur "abc". Cela permet de détecter facilement des erreurs de conversion ou des entrées incorrectes.
- Utilisation courante : strtol est couramment utilisée dans les applications nécessitant une analyse précise et flexible des nombres entiers à partir de chaînes de caractères, comme les analyseurs de fichiers de configuration, les analyseurs de ligne de commande ou les programmes traitant des valeurs numériques entrées par l'utilisateur. Grâce à son support des bases multiples et sa gestion robuste des erreurs, elle est particulièrement adaptée aux contextes où la conversion de chaînes de caractères en entiers est fréquente.
Exemple
Voici quelques exemples typiques de l'utilisation de cette fonction :
Essayer maintenant !
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- int main() {
- char *s, *sr;
- s = "0";
- printf("0 = %i\n",strtol(s,&sr,10));
- s = "1";
- printf("1 = %i\n",strtol(s,&sr,10));
- s = "123";
- printf("123 = %i\n",strtol(s,&sr,10));
- s = "-123";
- printf("-123 = %i\n",strtol(s,&sr,10));
- s = "G";
- printf("G = %i\n",strtol(s,&sr,10));
- 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 : Mardi, le 28 juillet 2015