rand_s
Vygeneruje pseudonáhodné číslo. Tato funkce je bezpečnější verzí funkce rand
s vylepšeními zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.
Syntaxe
errno_t rand_s(unsigned int* randomValue);
Parametry
randomValue
Ukazatel na celé číslo pro uložení vygenerované hodnoty.
Vrácená hodnota
Nula v případě úspěchu, jinak kód chyby. Pokud je vstupním ukazatelem NULL
ukazatel_randomValue_
, funkce vyvolá neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, funkce vrátí EINVAL
a nastaví errno
na EINVAL
. Pokud funkce z jakéhokoli jiného důvodu selže, *_randomValue_
je nastavená na hodnotu 0.
Poznámky
Funkce rand_s
zapíše pseudonáhodné celé číslo v rozsahu 0 na UINT_MAX
vstupní ukazatel. Funkce rand_s
používá operační systém k vygenerování kryptograficky zabezpečených náhodných čísel. Nepoužívá počáteční hodnotu vygenerovanou srand
funkcí ani nemá vliv na náhodnou posloupnost čísel používanou rand
funkcí .
Konstanta _CRT_RAND_S
musí být definována před zahrnutím stdlib.h
hlavičky rand_s
funkce, jak je znázorněno v následujícím příkladu:
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
#define _CRT_RAND_S
#include <stdlib.h>
rand_s
závisí na RtlGenRandom
rozhraní API, které je dostupné pouze v systému Windows XP a novějších verzích.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
rand_s |
<stdlib.h> |
Další informace naleznete v tématu Kompatibilita.
Příklad
// 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 );
}
}
Ukázkový výstup
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
Viz také
Podpora pro matematiku a plovoucí desetinou čárku
rand
srand