当前位置: 首页 > 知识库问答 >
问题:

在c中的srand函数中,“time(null)”之前需要“(unsigned int)”吗?

宋飞掣
2023-03-14

我看过一些关于用C生成随机数的指南:有两件事让我感到疑惑:

> < li >据说除了stdlib.h和time.h库之外,我还必须包含math.h库才能运行,为什么?(afaik srand和rand函数在stdlib中)? < li>

在示例中,srand函数的编写方式如下:

srand((unsingned int)time(NULL);

我使用的是代码块,它在没有无符号int和数学库的情况下可以正常工作,那么为什么它们在示例中包含它呢?

谢谢!

共有3个答案

强保臣
2023-03-14

您不需要包含数学库。

该示例大部分时间都有效,但在技术上是不正确的,因为转换为不兼容的类型是无效的。

唯一正确的方法是对变量的字节进行哈希处理,time_t。

time_t t = time( NULL ) ;
char* p = ( char* )&t ; 
unsigned int hash = 0 ;

for( int i = 0 ; i < sizeof( time_t ) ; i++ )  
    hash += p[i] ;

然后在 srand() 函数中使用哈希。

你可以转换成char*然后使用指针。哈希函数非常简单,你可以选择一个更好的。

扈沛
2023-03-14

在c中的srand函数中,“time(null)”之前需要“(unsigned int)”吗?

time()返回time_t类型的变量。这在编译器上对应的类型大小是由实现定义的。您必须检查编译器文档。

据说除了stdlib.h和time.h库我还得包含math.h库才能工作,为什么?

对于发布的行,不需要math.h。很可能是代码的其他部分需要它。

孔光赫
2023-03-14

函数< code>time返回一个< code>time_t值,而< code>srand需要一个< code>unsigned int参数。如果没有强制转换,编译器可能会产生警告,并且根据编译器标志,这可能会导致编译失败。一般来说,避免警告是一种好的做法。

您显示的行中的任何内容都不需要包含 math.h。可能此注释指的是代码的其他部分?

 类似资料:
  • 本文向大家介绍C / C ++中的rand()和srand(),包括了C / C ++中的rand()和srand()的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论C ++ STL的工作,语法以及示例和函数。 什么啊 rand()函数是C ++ STL中的内置函数,在<cstdlib>头文件中定义。用于生成一系列随机数。当我们想在代码中生成随机数时,可以使用此函数。 就像我们在C

  • 作为一般规则,jasypt期望加密的配置参数出现在“enc(...)”的周围。 例如,在appconfig.properties文件中,我有以下属性:

  • C 标准库 - <time.h> 描述 C 库函数 time_t time(time_t *seconds) 返回自纪元 Epoch(1970-01-01 00:00:00 UTC)起经过的时间,以秒为单位。如果 seconds 不为空,则返回值也存储在变量 seconds 中。 声明 下面是 time() 函数的声明。 time_t time(time_t *t) 参数 seconds --

  • 是否需要在之前调用?为什么?我看不出有什么不同,但我看到很多人这样做。

  • 我想在c中对大随机数进行降级。问题是srand()可以生成的最大数字大约是37000。我想在intervall中创建一个70000到2150000000的数字。有人能帮我吗? 随机数生成器:

  • 这是我的错误。我是第一次用这个制作网页。请帮助我这个错误说明了什么。 TypeError:app.use()需要中间件函数 在EventeMitter.use(c:\users\my APY\webstormProjects\main\node_modules\express\lib\application.js:209:11) 在module.exports(c:\users\my LAPY\w