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 des fonctions mathématiques et à virgule flottante
rand
srand