rand_s

生成一个伪随机数。 此函数是函数 rand 更安全的版本,具有安全增强功能,如 CRT 中的安全功能中所述。

语法

errno_t rand_s(unsigned int* randomValue);

参数

randomValue
指向整数的指针,用于保存生成的值。

返回值

如果成功,则返回零,否则返回错误代码。 如果输入指针 _randomValue_NULL 指针,则此函数将调用无效的参数处理程序,如参数验证中所述。 如果允许继续执行,则函数将返回 EINVAL,并且将 errno 设置为 EINVAL。 如果函数出于任何其他原因失败,*_randomValue_ 则会设置为 0。

备注

rand_s 函数将介于 0 到 UINT_MAX 范围内的一个伪随机整数写入输入指针。 rand_s 函数使用操作系统生成加密型安全随机数。 它不使用由 srand 函数生成的种子,也不影响 rand 所使用的随机数序列。

在包含 rand_s 函数的 stdlib.h 标头之前,必须定义 _CRT_RAND_S 常量,如以下示例所示:

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

#define _CRT_RAND_S
#include <stdlib.h>

rand_s 取决于 RtlGenRandom 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.

// Remember to define _CRT_RAND_S before you include
// stdlib.h.
#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

另请参阅

数学和浮点支持
rand
srand