Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menghasilkan angka pseudorandom. Fungsi ini adalah versi fungsi randyang lebih aman , dengan peningkatan keamanan seperti yang dijelaskan dalam Fitur keamanan di CRT.
Sintaks
errno_t rand_s(unsigned int* randomValue);
Parameter
randomValue
Penunjuk ke bilangan bulat untuk menyimpan nilai yang dihasilkan.
Nilai hasil
Nol jika berhasil, jika tidak, kode kesalahan. Jika penunjuk _randomValue_ input adalah NULL penunjuk, fungsi memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi mengembalikan EINVAL dan mengatur errno ke EINVAL. Jika fungsi gagal karena alasan lain, *_randomValue_ diatur ke 0.
Keterangan
Fungsi ini rand_s menulis bilangan bulat pseudorandom dalam rentang 0 hingga UINT_MAX penunjuk input. Fungsi ini rand_s menggunakan sistem operasi untuk menghasilkan angka acak yang aman secara kriptografis. Ini tidak menggunakan benih yang dihasilkan oleh srand fungsi, juga tidak memengaruhi urutan angka acak yang digunakan oleh rand.
Konstanta _CRT_RAND_S harus ditentukan sebelum stdlib.h header untuk rand_s fungsi disertakan, seperti yang ditunjukkan dalam contoh berikut:
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
#define _CRT_RAND_S
#include <stdlib.h>
rand_s tergantung pada RtlGenRandom API, yang hanya tersedia di Windows XP dan yang lebih baru.
Persyaratan
| Rutin | Header yang diperlukan |
|---|---|
rand_s |
<stdlib.h> |
Untuk informasi selengkapnya, lihat Kompatibilitas.
Contoh
// 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 );
}
}
Sampel output
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