Partager via


rand_s

Génère un nombre pseudo-aléatoire. Cette fonction est une version plus sécurisée de la fonction rand, avec des améliorations de sécurité, comme décrit dans les fonctionnalités de sécurité du CRT.

Syntaxe

errno_t rand_s(unsigned int* randomValue);

Paramètres

randomValue
Pointeur vers un entier pour contenir la valeur générée.

Valeur retournée

Zéro en cas de réussite, code d’erreur dans un autre cas. Si le pointeur d’entrée est un pointeur_randomValue_, la fonction appelle un gestionnaire de paramètres non valide, comme décrit dans la validation des NULL paramètres. Si l'exécution est autorisée à continuer, cette fonction retourne EINVAL et définit à errno à EINVAL. Si la fonction échoue pour une autre raison, *_randomValue_ a la valeur 0.

Notes

La fonction rand_s écrit un entier pseudo-aléatoire compris entre 0 et UINT_MAX dans le pointeur d’entrée. La fonction rand_s utilise le système d’exploitation pour générer des nombres aléatoires sécurisés par chiffrement. Elle n’utilise pas la valeur initiale générée par la srand fonction, ni n’affecte-t-elle la séquence de nombres aléatoires utilisée par rand.

La _CRT_RAND_S constante doit être définie avant que l’en-tête stdlib.h de la rand_s fonction soit inclus, comme illustré dans l’exemple suivant :

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

#define _CRT_RAND_S
#include <stdlib.h>

rand_s dépend de l’API RtlGenRandom , disponible uniquement dans Windows XP et versions ultérieures.

Spécifications

Routine En-tête requis
rand_s <stdlib.h>

Pour plus d'informations, voir Compatibilité.

Exemple

// crt_rand_s.c
// This program illustrates how to generate random
// integer or floating point numbers in a specified range.

// Remember to define _CRT_RAND_S before you include
// stdlib.h.
#define _CRT_RAND_S

#include <stdlib.h>
#include <stdio.h>
#include <limits.h>

int main( void )
{
    int             i;
    unsigned int    number;
    double          max = 100.0;
    errno_t         err;

    // Display 10 random integers in the range [ 1,10 ].
    for( i = 0; i < 10;i++ )
    {
        err = rand_s( &number );
        if (err != 0)
        {
            printf_s("The rand_s function failed!\n");
        }
        printf_s( "  %u\n", (unsigned int) ((double)number /
                       ((double) UINT_MAX + 1 ) * 10.0) + 1);
    }

    printf_s("\n");

    // Display 10 random doubles in [0, max).
    for (i = 0; i < 10;i++ )
    {
        err = rand_s( &number );
        if (err != 0)
        {
            printf_s("The rand_s function failed!\n");
        }
        printf_s( "  %g\n", (double) number /
                          ((double) UINT_MAX + 1) * max );
    }
}

Exemple de sortie

10
4
5
2
8
2
5
6
1
1

32.6617
29.4471
11.5413
6.41924
20.711
60.2878
61.0094
20.1222
80.9192
65.0712

Voir aussi

Prise en charge mathématique et à virgule flottante
rand
srand