rand_s
生成一个伪随机数。 rand 的一个版本提供安全增强功能,正如 CRT 中的安全功能所述。
errno_t rand_s( unsigned int* randomValue);
返回值
如果成功,则为零;否则为错误代码。 如果输入指针 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,只能在 Windows XP 和更高版本中提供。
要求
例程 |
必需的标头 |
---|---|
rand_s |
<stdlib.h> |
有关更多信息,请参见Compatibility。
示例
// 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