rand_s
Genera un número pseudoaleatorio. Una versión de rand con mejoras de seguridad como se describe en Características de seguridad de CRT.
errno_t rand_s( unsigned int* randomValue);
Valor devuelto
Cero si es correcto, si no, un código de error. Si el puntero randomValue de entrada es un puntero NULL, la función invoca un controlador no válido de parámetro, tal y 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 de rand_s escribe un entero pseudoaleatorio en el intervalo de 0 a UINT_MAX al puntero de la entrada. La función de rand_s utiliza el sistema operativo para generar criptográficamente garantiza números aleatorios. No utiliza el valor generado por la función de srand , ni afecta a la secuencia de números aleatorios utilizada por rand.
La función de rand_s requiere que _CRT_RAND_S constante está definido antes de la instrucción include para que la función está declarada, como en el ejemplo siguiente:
#define _CRT_RAND_S
#include <stdlib.h>
rand_s depende de RtlGenRandom API, que sólo en Windows XP y posterior disponibles.
Requisitos
Rutina |
Encabezado necesario |
---|---|
rand_s |
<stdlib.h> |
Para obtener más información, vea Compatibilidad.
Ejemplo
// 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 );
}
}
Resultados del 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