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 rand
daha 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 EINVAL
ayarlanı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 rand
kullanı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_s
RtlGenRandom
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