Share via


rand_s

生成一个伪随机数字。 兰特 的版本与安全增强的 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 定义在中声明的函数的 include 语句之前,例如:

#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.

// 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

.NET Framework 等效项

系统:: 任意类

请参见

参考

浮点支持

srand