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ść errno
EINVAL
. 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 rand
funkcję .
Stała musi być zdefiniowana _CRT_RAND_S
przed dołączeniu nagłówka rand_s
stdlib.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