rand_s

疑似乱数を生成します。 この関数は、「CRT のセキュリティ機能」に説明されているように、rand のセキュリティが強化されたバージョンです。

errno_t rand_s(   unsigned int* randomValue);

戻り値

正常に終了した場合は 0 を返し、それ以外の場合はエラー コードを返します。 入力ポインター randomValue が null ポインターの場合、「パラメーターの検証」に説明されているように、この関数は無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、この関数は 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 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.

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

参照

関連項目

浮動小数点サポート

srand