Поделиться через


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функцией.

Константа _CRT_RAND_S должна быть определена перед включением заголовка stdlib.hrand_s функции, как показано в следующем примере:

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.

#define _CRT_RAND_S
#include <stdlib.h>

rand_sRtlGenRandom зависит от 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