rand_s

Generiert eine pseudozufällige Zahl. Diese Funktion ist eine sicherere Version der Funktion randmit 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 randder 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. Informationen zum Ändern dieses Verhaltens finden Sie im Global state in the 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 und Gleitkommaunterstützung
rand
srand