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