#include <stdlib.h> // <cstdlib> en C++
long long strtoll( const char * theString, char ** end, int base );
Cette fonction, signifiant string to long long, permet de transformer une chaîne de caractères, contenant la représentation textuelle d'un
entier, en un entier très long (type long long
ou long long int
: ce sont des synonymes).
Attention : cette fonction est disponible à partir de la version C99 ISO du langage. De même, le type long long
a été introduit dans cette norme C99 ISO.
Si vous utilisez un compilateur C++, cette fonction necessitera un compilateur compatible C++11.
123456toto
, seuls les caractères 123456
seront pris en charge et en sortie de l'appel de fonction, end
pointera sur
le premier 't'
(de "toto"
). Ce paramètre peut aussi être fixé à NULL
et, dans ce cas, il ne sera pas modifié par la fonction.
La valeur de retour, de type long long
(ou long long int
), contient la valeur associée à la chaîne de caractères passée en paramètre.
Si aucun entier n'a pu être décodé de la chaîne alors la valeur de retour sera 0LL et le pointeur stocké à l'intérieur du pointeur end
, passé en second paramètre,
sera égal à theString
(sauf si end
est null, bien entendu). C'est de cette manière que vous pourrez distinguer le cas ou la chaîne de caractères
contient "0" du cas ou aucun entier ne peut être décodé.
Si la valeur à décoder et en dehors des bornes du type long long
, la variable errno sera fixée à ERANGE
et la fonction
retournera une valeur LLONG_MIN ou LLONG_MAX (définie dans <limits.h> ou <climits> en C++).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
#include <assert.h> #include <stdio.h> #include <stdlib.h> int main() { // Exemple d'utilisation sur une mauvaise valeur char * badString = "notPossible"; char * endPtr; long long value = strtoll( badString, &endPtr, 10 ); if ( endPtr == badString ) { printf( "Bad string format: %s - value == %lld\n", endPtr, value ); } else { printf( "Value == %lld\n", value ); } // Exemple d'utilisation sur une valeur correct char * correctString = "123456"; value = strtoll( correctString, &endPtr, 10 ); if ( endPtr == badString ) { printf( "Bad string format: %s - value == %lld\n", endPtr, value ); } else { printf( "Value == %lld\n", value ); } // Exemple d'extraction de plusieurs valeurs consécutives dans la chaîne. correctString = "123 456 789"; long long value1 = strtoll( correctString, &endPtr, 10 ); assert( correctString != endPtr ); correctString = endPtr; long long value2 = strtoll( correctString, &endPtr, 10 ); assert( correctString != endPtr ); correctString = endPtr; long long value3 = strtoll( correctString, &endPtr, 10 ); assert( correctString != endPtr ); printf( "Values : %lld - %lld - %lld\n", value1, value2, value3 ); // Exemple d'extraction de plusieurs valeurs avec détermination de la base. correctString = "-123 010 0xFFFF"; // -123 decimal // 010 octal // 0xFFFF hexadecimal value1 = strtoll( correctString, &endPtr, 0 ); assert( correctString != endPtr ); correctString = endPtr; value2 = strtoll( correctString, &endPtr, 0 ); assert( correctString != endPtr ); correctString = endPtr; value3 = strtoll( correctString, &endPtr, 0 ); assert( correctString != endPtr ); printf( "Values : %lld - %lld - %lld\n", value1, value2, value3 ); return EXIT_SUCCESS; } |
Voici l'affichage produit par cet exemple :
$> gcc -o Essai Essai.c $> ./Essai Bad string format: notPossible - value == 0 Value == 123456 Values : 123 - 456 - 789 Values : -123 - 8 - 65535 $>
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :