rand_s
Generiert eine Pseudozufallszahl.Eine Version von Rand mit unter Security Enhancements, wie in Sicherheitsfeatures im CRTbeschrieben.
errno_t rand_s( unsigned int* randomValue);
Rückgabewert
Beliebige wenn erfolgreich andernfalls ein Fehlercode.Wenn der Eingabezeiger randomValue ein NULL-Zeiger ist, ruft die Funktion einen ungültigen Parameter für ein, wie in Parametervalidierungbeschrieben.Wenn die Ausführung ermöglicht wird, um fortzufahren, gibt die Funktion EINVAL zurück und legt ihn fest. EINVALzu errnoWenn die Funktion für jeden anderen Grund fehlschlägt, *randomValue wird auf 0 festgelegt.
Hinweise
Die rand_s-Funktion schreibt eine UINT_MAX pseudozufälligen ganzen Zahl im Bereich von 0 bis Eingabezeiger.Die rand_s-Funktion verwendet, um das Betriebssystem kryptografisch sichere Zufallszahlen generiert.Es verwendet nicht den Startwert, der von der srand-Funktion generiert wird, wirkt sich trotzdem die Zufallszahl sequence, die von randverwendet wird.
Die rand_s-Funktion erfordert, dass konstantes _CRT_RAND_S vor der Inklusions Anweisung definiert wird, sodass die Funktion deklariert werden kann, wie im folgenden Beispiel dargestellt:
#define _CRT_RAND_S
#include <stdlib.h>
rand_s hängt vom RtlGenRandom API ab, das in Windows XP und höher nur 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.
// 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