rand_s
Gera um número pseudoaleatórios.Uma versão do aleatório com aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.
errno_t rand_s( unsigned int* randomValue);
Valor de retorno
Zero se for bem sucedido, caso contrário, um código de erro.Se o ponteiro de entrada randomValue é um ponteiro null, a função chama um manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro.Se a execução terá permissão para continuar, a função retornará EINVAL e define errno para EINVAL.Se a função falhar por qualquer outro motivo. *randomValue for definido como 0.
Comentários
O rand_s função escreve um pseudoaleatórios inteiro no intervalo de 0 a UINT_MAX do ponteiro de entrada.O rand_s função usa o sistema operacional para gerar números aleatórios criptograficamente seguros.Não usa a semente gerada pelo srand função, nem afeta a seqüência de números aleatória usada por rand.
O rand_s função exige que a constante _CRT_RAND_S ser definidos antes da instrução de inclusão para a função a ser declarado, como no exemplo a seguir:
#define _CRT_RAND_S
#include <stdlib.h>
rand_svaria de acordo com o RtlGenRandom API, que só está disponível no Windows XP e versões posteriores.
Requisitos
Rotina |
Cabeçalho necessário |
---|---|
rand_s |
<stdlib.h> |
Para obter mais informações, consulte compatibilidade.
Exemplo
// 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 );
}
}
Saída de exemplo
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