Aracılığıyla paylaş


rand_s

Sahte bir sayı oluşturur. Bu işlev, CRT'deki Güvenlik özellikleri bölümünde açıklandığı gibi güvenlik geliştirmeleri ile işlevinin randdaha güvenli bir sürümüdür.

Sözdizimi

errno_t rand_s(unsigned int* randomValue);

Parametreler

randomValue
Oluşturulan değeri tutmak için bir tamsayı işaretçisi.

Dönüş değeri

Başarılı olursa sıfır, aksi takdirde bir hata kodu. Giriş işaretçisi _randomValue_ bir NULL işaretçiyse, işlev Parametre doğrulama bölümünde açıklandığı gibi geçersiz bir parametre işleyicisi çağırır. Yürütmenin devam etmesi için izin verilirse, işlevi döndürür EINVAL ve olarak EINVALayarlanırerrno. İşlev başka bir nedenle *_randomValue_ başarısız olursa 0 olarak ayarlanır.

Açıklamalar

İşlev, rand_s giriş işaretçisine 0 UINT_MAX aralığındaki bir sahte tamsayı yazar. işlevi, rand_s şifreleme açısından güvenli rastgele sayılar oluşturmak için işletim sistemini kullanır. işlevi tarafından srand oluşturulan tohumu kullanmaz ve tarafından randkullanılan rastgele sayı dizisini etkilemez.

Aşağıdaki _CRT_RAND_S örnekte gösterildiği gibi, işlevin stdlib.h üst bilgisi rand_s dahil edilmeden önce sabit tanımlanmalıdır:

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

#define _CRT_RAND_S
#include <stdlib.h>

rand_sRtlGenRandom yalnızca Windows XP ve sonraki sürümlerde kullanılabilen API'ye bağlıdır.

Gereksinimler

Yordam Gerekli başlık
rand_s <stdlib.h>

Daha fazla bilgi için bkz . Uyumluluk.

Örnek

// 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 );
    }
}

Örnek çıktı

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

Ayrıca bkz.

Matematik ve kayan nokta desteği
rand
srand