rand_s

疑似乱数を生成します。 この関数は、CRT のセキュリティ機能の説明に従ってセキュリティが強化された、より安全なバージョンの関数randです。

構文

errno_t rand_s(unsigned int* randomValue);

パラメーター

randomValue
生成された値を保持する整数へのポインター。

戻り値

正常に終了した場合は 0 を返し、それ以外の場合はエラー コードを返します。 入力ポインターがポインター_randomValue_NULL場合、「パラメーターの検証」で説明されているように、関数は無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、関数は EINVAL を返し、errnoEINVAL に設定します。 その他の何らかの理由で関数が失敗した場合、*_randomValue_ は 0 に設定されます。

解説

rand_s 関数は、0 ~ UINT_MAX の範囲の整数の擬似乱数を入力ポインターに書き込みます。 rand_s 関数では、オペレーティング システムを使用して、暗号強度が高い乱数を生成します。 この関数は srand 関数の生成したシードを使用せず、また rand の使用するランダムな数値のシーケンスに影響を与えません。

次の_CRT_RAND_S例に示すように、関数のヘッダーをstdlib.hrand_s含める前に定数を定義する必要があります。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

#define _CRT_RAND_S
#include <stdlib.h>

rand_sRtlGenRandom API に依存しますが、この API は Windows XP 以降でのみ利用できます。

必要条件

ルーチンによって返される値 必須ヘッダー
rand_s <stdlib.h>

詳細については、「互換性」をご覧ください。

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

サンプル出力

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

関連項目

数学と浮動小数点のサポート
rand
srand