Fonction strtold

Entête à inclure

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

Fonction strtold

long double strtold( const char * theString, char ** end ); 

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

Attention : cette fonction est disponible à partir de la version C99 ISO du langage. De même, le type long double a été introduit dans cette norme C99 ISO. Si vous utilisez un compilateur C++, cette fonction necessitera un compilateur compatible C++11.

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 une valeur numérique dans la chaine de caractère. Par exemple, si le premier paramètre vaut 123.456toto, seuls les caractères 123.456 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.

Valeur de retour

La valeur de retour, de type long double, contient la valeur associée à la chaîne de caractères passée en paramètre.

Si aucune valeur flottante n'a pu être décodée à partir de la chaîne alors la valeur de retour sera 0.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.0" du cas ou aucune valeur flottante ne peut être décodée.

Si la valeur à décoder n'est pas représentable par le type double, la variable errno sera fixée à ERANGE et la fonction retournera la valeur HUGE_VAL.

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 
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>


int main() {

    // Exemple d'utilisation sur une mauvaise valeur
    char * badString = "notPossible";
    char * endPtr;
    long double value = strtold( badString, &endPtr ); 

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

    // Exemple d'utilisation sur une valeur correct
    char * correctString = "123.456";
    value = strtold( correctString, &endPtr ); 
    
    if ( endPtr == badString ) {
        printf( "Bad string format: %s - value == %Lf\n", endPtr, value );
    } else {
        printf( "value == %Lf\n", value );
    }
    
    // Exemple d'extraction de plusieurs valeurs consécutives dans la chaîne.
    correctString = "12.3 8.75 10.11";
    long double value1 = strtold( correctString, &endPtr ); 
    assert( correctString != endPtr );
    
    correctString = endPtr;
    long double value2 = strtold( correctString, &endPtr ); 
    assert( correctString != endPtr );
    
    correctString = endPtr;
    long double value3 = strtold( correctString, &endPtr ); 
    assert( correctString != endPtr );

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


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

Voici l'affichage produit par cet exemple :

$> gcc -o Essai Essai.c
$> ./Essai
Bad string format: notPossible - value == 0.000000
value == 123.456000
Values : 12.300000 - 8.750000 - 10.110000
$> 

Sujets connexes