rand_s
Génère un nombre pseudo-aléatoire. Il s'agit de versions de rand avec des améliorations de sécurité, comme décrit dans Fonctionnalités de sécurité dans le CRT.
errno_t rand_s( unsigned int* randomValue);
Valeur de retour
Zéro dans le cas d'une opération réussie, sinon affiche un code d'erreur. Si le paramètre d'entrée randomValue est un pointeur null ou si la fonction appelle un gestionnaire de paramètre non valides, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, la fonction retourne EINVAL et définit errno à la valeur EINVAL. Si la fonction échoue pour toute autre raison, *randomValue est défini à la valeur 0.
Notes
La fonction rand_s écrit un entier pseudo-aléatoire comprise entre 0 et UINT_MAX au 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 cryptographiquement. Il n'utilise pas la valeur générée par la fonction srand, ni n'affecte la séquence de nombres aléatoires utilisée par rand.
La fonction rand_s nécessite que la constante_CRT_RAND_S soit définie avant que l'instruction d'inclusion pour la fonction ne soit déclarée, comme dans l'exemple suivant :
#define _CRT_RAND_S
#include <stdlib.h>
rand_s dépend de l'API RtlGenRandom, qui est disponible dans Windows XP ou ses versions ultérieures.
Configuration requise
Routine |
En-tête requis |
---|---|
rand_s |
<stdlib.h> |
Pour plus d'informations sur la compatibilité, consultez Compatibilité.
Exemple
// crt_rand_s.c
// This program illustrates how to generate random
// integer or floating point numbers in a specified range.
// Remembering to define _CRT_RAND_S prior
// to inclusion statement.
#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 );
}
}
Résultat de l'exemple
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