Condividi tramite


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

Vedi anche

Supporto matematico e a virgola mobile
rand
srand