rand_srand_s

疑似乱数を生成します。Generates a pseudorandom number. これは、「 CRT のセキュリティ機能」の説明にあるとおり、セキュリティが強化された、関数randのより安全なバージョンです。This is a more secure version of the function rand, with security enhancements as described in Security Features in the CRT.

構文Syntax

errno_t rand_s(unsigned int* randomValue);

パラメーターParameters

randomValuerandomValue
生成された値を保持する整数へのポインター。A pointer to an integer to hold the generated value.

戻り値Return Value

正常に終了した場合は 0 を返し、それ以外の場合はエラー コードを返します。Zero if successful, otherwise, an error code. 入力ポインター _randomValue_が null ポインターの場合、この関数は、「パラメーターの検証」で説明されているように、無効なパラメーターハンドラーを呼び出します。If the input pointer randomValue is a null pointer, the function invokes an invalid parameter handler, as described in Parameter Validation. 実行の継続が許可された場合、関数はeinvalを返し、 errnoeinvalに設定します。If execution is allowed to continue, the function returns EINVAL and sets errno to EINVAL. 他の何らかの理由で関数が失敗した場合、*_randomValue_は0に設定されます。If the function fails for any other reason, *randomValue is set to 0.

RemarksRemarks

Rand_s関数は、0 ~ UINT_MAXの範囲のランダムな整数を入力ポインターに書き込みます。The rand_s function writes a pseudorandom integer in the range 0 to UINT_MAX to the input pointer. Rand_s関数は、オペレーティングシステムを使用して、暗号的に保護されたランダムな数値を生成します。The rand_s function uses the operating system to generate cryptographically secure random numbers. Srand関数によって生成されたシードは使用されません。また、 randで使用される乱数シーケンスにも影響しません。It does not use the seed generated by the srand function, nor does it affect the random number sequence used by rand.

Rand_s関数を使用するには、次の例のように、関数を宣言するために、include ステートメントの前に定数 _CRT_RAND_Sが定義されている必要があります。The rand_s function requires that constant _CRT_RAND_S be defined prior to the inclusion statement for the function to be declared, as in the following example:

#define _CRT_RAND_S
#include <stdlib.h>

rand_sは、Windows XP 以降でのみ使用できるRtlgenrandom API に依存しています。rand_s depends on the RtlGenRandom API, which is only available in Windows XP and later.

必要条件Requirements

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

詳細については、「 互換性」を参照してください。For more information, see Compatibility.

Example

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

出力例Sample Output

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

関連項目See also

浮動小数点サポートFloating-Point Support
randrand
srandsrand