共用方式為


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 (含) 以後版本可供使用。

需求

常式

必要的標頭

rand_s

<stdlib.h>

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

範例

// 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