疑似乱数を生成します。この関数は、「CRT のセキュリティ強化」に説明されているように、rand のセキュリティが強化されたバージョンです。
errno_t rand_s( unsigned int* randomValue);
正常に終了した場合は 0 を返し、それ以外の場合はエラー コードを返します。入力ポインタ randomValue が null ポインタの場合、「パラメータの検証」に説明されているように、この関数は無効なパラメータ ハンドラを呼び出します。実行の継続が許可された場合、この関数は EINVAL を返し、errno を EINVAL に設定します。
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> |
Windows XP Home Edition、Windows XP Professional、Windows Server 2003
|
詳細については、「互換性」を参照してください。
// 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
System::Random Class
関連項目
浮動小数点サポート
srand