Udostępnij przez


rand_s

Generuje liczbę pseudorandom. Ta funkcja jest bezpieczniejszą wersją funkcji rand, z ulepszeniami zabezpieczeń zgodnie z opisem w temacie Funkcje zabezpieczeń w języku CRT.

Składnia

errno_t rand_s(unsigned int* randomValue);

Parametry

randomValue
Wskaźnik do liczby całkowitej w celu przechowywania wygenerowanej wartości.

Wartość zwracana

Zero w przypadku powodzenia, w przeciwnym razie kod błędu. Jeśli wskaźnik _randomValue_ wejściowy jest wskaźnikiem, funkcja wywołuje nieprawidłową procedurę NULL obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, funkcja zwraca EINVAL i ustawia wartość errnoEINVAL. Jeśli funkcja zakończy się niepowodzeniem z jakiegokolwiek innego powodu, *_randomValue_ zostanie ustawiona wartość 0.

Uwagi

Funkcja rand_s zapisuje liczbę całkowitą pseudorandom w zakresie 0 do UINT_MAX wskaźnika wejściowego. Funkcja rand_s używa systemu operacyjnego do generowania kryptograficznie zabezpieczonych liczb losowych. Nie używa inicjatora wygenerowanego srand przez funkcję ani nie ma wpływu na losową sekwencję liczb używaną przez randfunkcję .

Stała musi być zdefiniowana _CRT_RAND_S przed dołączeniu nagłówka rand_sstdlib.h funkcji, jak pokazano w poniższym przykładzie:

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

#define _CRT_RAND_S
#include <stdlib.h>

rand_s zależy od interfejsu RtlGenRandom API, który jest dostępny tylko w systemie Windows XP i nowszych wersjach.

Wymagania

Procedura Wymagany nagłówek
rand_s <stdlib.h>

Aby uzyskać więcej informacji, zobacz Zgodność.

Przykład

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

Przykładowe dane wyjściowe

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

Zobacz też

Obsługa obliczeń matematycznych i zmiennoprzecinkowych
rand
srand