Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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