rand_s
Genera un numero pseudocasuale. Questa funzione è una versione più sicura della funzione rand
, con miglioramenti della sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
errno_t rand_s(unsigned int* randomValue);
Parametri
randomValue
Puntatore a un numero intero in cui contenere il valore generato.
Valore restituito
Zero in caso di esito positivo. In caso contrario un codice di errore. Se il puntatore _randomValue_
di input è un NULL
puntatore, la funzione richiama un gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, la funzione restituisce EINVAL
e imposta errno
su EINVAL
. Se la funzione ha esito negativo per qualsiasi altro motivo, *_randomValue_
è impostata su 0.
Osservazioni:
La funzione rand_s
scrivere un intero pseudocasuale nell'intervallo compreso tra 0 e UINT_MAX
nel puntatore di input. La funzione rand_s
usa il sistema operativo per generare numeri casuali sicuri dal punto di vista crittografico. Non usa il valore di inizializzazione generato dalla srand
funzione, né influisce sulla sequenza di numeri casuali usata da rand
.
La costante deve essere definita prima dell'inserimento _CRT_RAND_S
dell'intestazione stdlib.h
per la rand_s
funzione, come illustrato nell'esempio seguente:
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
#define _CRT_RAND_S
#include <stdlib.h>
rand_s
dipende dall'API RtlGenRandom
, disponibile solo in Windows XP e versioni successive.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
rand_s |
<stdlib.h> |
Per altre informazioni, vedere Compatibility.
Esempio
// 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 );
}
}
Output di esempio
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