C random()和setstate函数的行为不符合预期

Dav*_*son 5 c random bsd

我不确定为什么这两个代码块给出不同的输出:

unsigned int seed1 = 0;
char state1[256];
initstate(seed1, state1, 256);
printf("%10ld\n", random());
printf("%10ld\n", random());
// Gives:
// 1216130483
// 1950449197
Run Code Online (Sandbox Code Playgroud)

unsigned int seed1 = 0;
char state1[256];
initstate(seed1, state1, 256);
printf("%10ld\n", random());
setstate(state1);
printf("%10ld\n", random());
// Gives:
// 1216130483
// 625602885
Run Code Online (Sandbox Code Playgroud)

我误解了setstate()的作用吗?

编辑:有趣的是,看看它给出了什么:

unsigned int seed1 = 0;
char state1[256];
initstate(seed1, state1, 256);
printf("%10ld\n", random());
setstate(state1);
setstate(state1);
printf("%10ld\n", random());
// Gives:
// 1216130483
// 1950449197
Run Code Online (Sandbox Code Playgroud)

unw*_*ind 2

我想对 的调用initstate()也不会切换到该状态,但对 的调用会setstate()切换到该状态,这就是为什么后一个random()调用返回从新状态生成的数字的原因。

  • 对代码进行了一些实验后,我认为情况并非如此。在 `initstate()` 之后添加对 `setstate()` 的调用没有任何区别。 (2认同)