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