Fonction strtoul

Entête à inclure

#include <stdlib.h>  // <cstdlib> en C++

Fonction strtoul

unsigned long strtoul( const char * theString, char ** end, int base ); 

Cette fonction, signifiant string to unsigned long, permet de transformer une chaîne de caractères, contenant la représentation textuelle d'un entier, en un entier typé unsigned long.

Paramètres

  • theString : ce paramètre contient la chaîne de caractères à convertir.
  • end : ce paramètre permet de savoir ce qui a été interprété comme étant un entier dans la chaine de caractère. Par exemple, si le premier paramètre vaut 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.
  • base : permet de spécifier la base de numération à utiliser pour décoder vos entiers. La valeur de ce paramètre doit être comprise en 2 et 36 (bornes incluses) ou bien valoir 0. Dans ce dernier cas, le système cherchera à déterminer la base automatiquement en fonction d'un éventuel préfix (0=octal, 0x=héxadécimal, 0X=héxadécimal).

Valeur de retour

La valeur de retour, de type unsigned long, 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 0L 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 unsigned long, la variable errno sera fixée à ERANGE et la fonction retournera une valeur ULONG_MIN ou ULONG_MAX (définie dans <limits.h> ou <climits> en C++).

Exemple de code

 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;
    unsigned long value = strtol( badString, &endPtr, 10 ); 

    if ( endPtr == badString ) {
        printf( "Bad string format: %s - value == %lu\n", endPtr, value );
    } else {
        printf( "value == %lu\n", value );
    }

    // Exemple d'utilisation sur une valeur correct
    char * correctString = "123456";
    value = strtol( correctString, &endPtr, 10 ); 
    
    if ( endPtr == badString ) {
        printf( "Bad string format: %s - value == %lu\n", endPtr, value );
    } else {
        printf( "value == %lu\n", value );
    }
    
    // Exemple d'extraction de plusieurs valeurs consécutives dans la chaîne.
    correctString = "123 456 789";
    unsigned long value1 = strtol( correctString, &endPtr, 10 ); 
    assert( correctString != endPtr );
    
    correctString = endPtr;
    unsigned long value2 = strtol( correctString, &endPtr, 10 ); 
    assert( correctString != endPtr );
    
    correctString = endPtr;
    unsigned long value3 = strtol( correctString, &endPtr, 10 ); 
    assert( correctString != endPtr );

    printf( "Values : %lu - %lu - %lu\n", value1, value2, value3 );

    // Exemple d'extraction de plusieurs valeurs avec détermination de la base.
    correctString = "123 010 0xFFFF";
    value1 = strtol( correctString, &endPtr, 0 ); 
    assert( correctString != endPtr );
    
    correctString = endPtr;
    value2 = strtol( correctString, &endPtr, 0 ); 
    assert( correctString != endPtr );
    
    correctString = endPtr;
    value3 = strtol( correctString, &endPtr, 0 ); 
    assert( correctString != endPtr );

    printf( "Values : %lu - %lu - %lu\n", value1, value2, value3 );


    return EXIT_SUCCESS;
}
Exemple d'utilisation de la fonction strtoul

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
$> 

Sujets connexes