rand_s
Generiert eine pseudozufällige Zahl. Diese Funktion ist eine sicherere Version der Funktion rand
mit Sicherheitsverbesserungen, wie in den Sicherheitsfeatures im CRT beschrieben.
Syntax
errno_t rand_s(unsigned int* randomValue);
Parameter
randomValue
Ein Zeiger auf eine ganze Zahl, um den generierten Wert zu enthalten.
Rückgabewert
Null, wenn erfolgreich, andernfalls ein Fehlercode. Wenn der Eingabezeiger _randomValue_
ein NULL
Zeiger ist, ruft die Funktion einen ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, gibt die Funktion EINVAL
zurück und setzt errno
auf EINVAL
. Wenn die Funktion aus einem anderen Grund fehlschlägt, *_randomValue_
wird sie auf 0 festgelegt.
Hinweise
Die rand_s
-Funktion schreibt eine pseudozufällige ganze Zahl im Bereich von 0 bis UINT_MAX
an die Position des Eingabezeigers. Die rand_s
-Funktion verwendet das Betriebssystem zur kryptografischen Erstellung sicherer Zufallszahlen. Sie verwendet weder den von der srand
Funktion generierten Seed noch wirkt es sich auf die zufallszahlenabfolge aus, die von rand
der Funktion verwendet wird.
Die _CRT_RAND_S
Konstante muss definiert werden, bevor die stdlib.h
Kopfzeile für die rand_s
Funktion enthalten ist, wie im folgenden Beispiel gezeigt:
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
#define _CRT_RAND_S
#include <stdlib.h>
rand_s
hängt von der RtlGenRandom
API ab, die nur in Windows XP und höher verfügbar ist.
Anforderungen
Routine | Erforderlicher Header |
---|---|
rand_s |
<stdlib.h> |
Weitere Informationen finden Sie unter Kompatibilität.
Beispiel
// 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 );
}
}
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
Siehe auch
Mathematische Unterstützung und Gleitkommaunterstützung
rand
srand