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