Freigeben über


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

.NET Framework-Entsprechung

System::Random Class

Siehe auch

Referenz

Gleitkommaunterstützung

srand