次の方法で共有


rand_s

更新 : 2007 年 11 月

疑似乱数を生成します。この関数は、「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 * 10.0) + 1);
    }

    printf_s("\n");

    // Display 10 random doubles between 0 and 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 * 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