C问题中的新手随机数发生器?

stu*_*ped 2 c random

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, const char *argv[]) {
    srand(clock());
    int num = rand() % 6 + 1;

    printf("%i", num);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在"srand(clock())中得到了这个警告;" 线.

警告:隐式转换失去整数精度:'clock_t'(又名'unsigned long')到'unsigned int'

我如何解决它?谢谢!

小智 8

不要使用srand(clock())而是使用srand((无符号)时间(NULL)).

更好的种子:

  • 使用time(NULL)获取一天中的时间并将结果转换为种子srand().

  • time(NULL)返回自1970年1月1日午夜以来经过的秒数.

  • 使用rdtsc()获取CPU时间戳并将结果转换为种子srand().rdtsc()不太可能返回重复值,因为它返回
    自启动以来处理器执行的指令数.

您还应该阅读US-CERT 安全编码中的这篇文章,了解如何正确播种.