共用方式為


rand_s

會產生虛擬隨機數字。 版本的rand中所述的安全性增強功能與安全性功能,則在 CRT 中

errno_t rand_s(   unsigned int* randomValue);

傳回值

零如果成功的話,否則錯誤代碼。 如果輸入的指標randomValue是空值的指標,如所述的函式叫用不正確的參數處理常式中, 參數驗證。 如果執行則允許繼續執行,則函數會傳回EINVAL ,並設定errno到EINVAL。 如果函式失敗,因其他原因 *randomValue設為 0。

備註

rand_s函式將虛擬隨機的整數,範圍從 0 到UINT_MAX 「 輸入 」 指標。 rand_s函式會使用作業系統來產生密碼編譯的安全隨機數字。 它不會使用所產生的識別值種子 srand 函式,也不會影響隨機的數字序列,由rand。

rand_s函式需要該常數_CRT_RAND_S之前進行宣告,如下例所示的函式的內含陳述式定義:

#define _CRT_RAND_S
#include <stdlib.h>

rand_s取決於 RtlGenRandom ,而且只在 Windows XP 提供較新的 API。

需求

常式

所需的標頭

rand_s

<stdlib.h>

如需詳細資訊,請參閱相容性

範例

// 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 );
    }
}

範例輸出

  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 對等用法

System::Random 類別

請參閱

參考

浮點支援

srand