Compartilhar via


rand_s

Gera um número pseudoaleatório. Essa função é uma versão mais segura da função rand, com aprimoramentos de segurança, conforme descrito em Recursos de segurança no CRT.

Sintaxe

errno_t rand_s(unsigned int* randomValue);

Parâmetros

randomValue
Um ponteiro para um inteiro para manter o valor gerado.

Valor retornado

Zero se for bem-sucedido; caso contrário, um código de erro. Se o ponteiro _randomValue_ de entrada for um NULL ponteiro, a função invocará um manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução puder continuar, a função retornará EINVAL e definirá errno como EINVAL. Se a função falhar por qualquer motivo, *_randomValue_ será definido como 0.

Comentários

A função rand_s grava um inteiro pseudoaleatório no intervalo de 0 a UINT_MAX para o ponteiro de entrada. A função rand_s usa o sistema operacional para gerar números aleatórios protegidos por criptografia. Ela não usa a propagação gerada pela função srand, nem afeta a sequência de números aleatória usada pelo rand.

A _CRT_RAND_S constante deve ser definida antes que o stdlib.h cabeçalho da rand_s função seja incluído, conforme mostrado no exemplo a seguir:

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.

#define _CRT_RAND_S
#include <stdlib.h>

rand_s depende da API RtlGenRandom, 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.

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

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

Confira também

Suporte matemático e de ponto flutuante
rand
srand