Compartir a través de


rand_s

Genera un número pseudoaleatorio. Esta función es una versión más segura de la función rand, con mejoras de seguridad como se describe en Características de seguridad de CRT.

Sintaxis

errno_t rand_s(unsigned int* randomValue);

Parámetros

randomValue
Un puntero a un entero para contener el valor generado.

Valor devuelto

Cero si es correcto, código de error en caso contrario. Si el puntero _randomValue_ de entrada es un NULL puntero, la función invoca un controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar, la función devuelve EINVAL y establece en errno en EINVAL. Si se produce un error en la función por cualquier otro motivo, *_randomValue_ se establece en 0.

Comentarios

La función rand_s escribe un entero pseudoaleatorio comprendido entre 0 y UINT_MAX en el puntero de entrada. La función rand_s usa el sistema operativo para generar números aleatorios criptográficamente seguros. No usa el valor de inicialización generado por la función srand ni afecta a la secuencia numérica aleatoria usada por rand.

La _CRT_RAND_S constante debe definirse antes de incluir el stdlib.h encabezado de la rand_s función, como se muestra en el ejemplo siguiente:

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

#define _CRT_RAND_S
#include <stdlib.h>

rand_s depende de la API RtlGenRandom, que solo está disponible en Windows XP y en versiones posteriores.

Requisitos

Routine Encabezado necesario
rand_s <stdlib.h>

Para obtener más información, consulte Compatibilidad.

Ejemplo

// 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 );
    }
}

Salida de ejemplo

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

Consulte también

Compatibilidad con cálculos matemáticos y el punto flotante
rand
srand