rand_s
Generiert eine Pseudozufallszahl. Eine Version von rand mit werden, wie in Sicherheitsfunktionen in der CRT beschrieben.
errno_t rand_s( unsigned int* randomValue);
Rückgabewert
Null wenn erfolgreich andernfalls ein Fehlercode. Wenn der eingegebene Zeiger randomValue ein NULL-Zeiger ist, ruft die Funktion einen ungültigen Parameterhandler auf, wie in Parametervalidierung beschrieben. Wenn die weitere Ausführung zugelassen wird, gibt die Funktion EINVAL zurück und setzt errno auf EINVAL. Wenn die Funktion für einen anderen Grund fehlschlägt, *randomValue auf 0 festgelegt.
Hinweise
Die Funktion rand_sUINT_MAX-Attribut eine Pseudo-Zufallsganze Zahl im Bereich von 0 z Eingabezeiger. Die Funktion rand_s verwendet das Betriebssystem, um kryptografisch Zufallszahlen generieren zu speichern. Es verwendet nicht den Startwert, der durch die srand-Funktion generiert wird, und wirkt sie sich auf die Zufallszahlensequenz, die von rand verwendet wird.
Die Funktion rand_s erfordert, dass konstantes _CRT_RAND_S vor der Inklusionsanweisung definiert wurde, sodass die Funktion deklariert werden, wie im folgenden Beispiel:
#define _CRT_RAND_S
#include <stdlib.h>
rand_s hängt von der API ab RtlGenRandom, die in Windows XP und höher nur verfügbar ist.
Anforderungen
Routine |
Erforderlicher Header |
---|---|
rand_s |
<stdlib.h> |
Weitere Informationen finden Sie unterKompatibilität.
Beispiel
// crt_rand_s.c
// This program illustrates how to generate random
// integer or floating point numbers in a specified range.
// Remembering to define _CRT_RAND_S prior
// to inclusion statement.
#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 );
}
}
Beispielausgabe
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