首页
社区
课程
招聘
为什么在cmd和winxp下tc中的rand函数不同?
发表于: 2011-11-7 12:35 4235

为什么在cmd和winxp下tc中的rand函数不同?

2011-11-7 12:35
4235
大家都知道rand是c的一个库函数.功能就是返回一个随机数.但是我这样做
  int i;
for (i=0;i<100;i++)
printf("%d  ",rand()%999); /*取100个随机数并打印*/
这样几行代码编译后运行的效果居然如此之大.我在xp下直接运行tc2.0然后编译连接,但是每次运行的结果都是一样的... 应该不关我rp的事.
但是昨天发现先运行cmd,然后运行tc并加载.c文件,编译连接后就没有这种情况了.
请问这是什么原因?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 105
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
设种子  内容要长
2011-11-7 13:50
0
雪    币: 1760
活跃值: (1616)
能力值: ( LV12,RANK:222 )
在线值:
发帖
回帖
粉丝
3
没有初始化随机数种子
2011-11-7 14:03
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也是来学习的  谢谢了
2011-11-7 14:26
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
time(0)做种子
2011-11-7 15:19
0
雪    币: 31
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
但是我在cmd中不设种子,照样可以随机.为什么?
2011-11-7 20:58
0
雪    币: 188
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
第一条是因为rand() 是伪随机数, 所以会一样
第二条没看明白,也表示不相信,正常情况下 rand函数应该是以机器码的形式写入到你生成的exe里面去的
除非你之前的cmd操作( 或有后台操作) 导致整个进程中的rand() 种子被调整了
2011-11-7 21:26
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
这种取随机数的函数自己都可以写的,
C库里的默认种子是1,
2011-11-8 03:21
0
雪    币: 31
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
我表示我并没有怎么操作.大家可以下载一个tc2.0试试,大小为1M.
在cmd下编译连接的过程: 开始->运行->cmd回车->cd\(回到根目录)->cd tc->tc shiyan->Alt+c+c(编译)->Alt+c+l(连接)->Alt+x(退出).就这么多,并没有操作别的什么.
在源程序种并没有srand函数.但是在cmd下编译的能有随机的效果.为什么?
#include <stdlib.h>
#include <stdio.h>
int main()
{
        int i;
        for(i=0;i<100;i++)
         printf("%d  ",rand()%999);
        getch();
        return 0;
}
上传的附件:
2011-11-8 14:43
0
雪    币: 96
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
rand() 和 srand() 的原码原理应该是这样:
//---------------------------------------------

static unsigned long int next = 1;   

int rand()
{
   
     next = next * xxxxxx +xxxxx  // 这里是个很复杂的产生伪随机数的计算。

   return (unsigned int)(next/xxx) % 32768;   //取得合适长度的返回值,这里是int.
}
srand(unsigned int x)          // 这里的x值是随机数就更好了,如用time(0)这样的变化的数取模
{                          
       next = x;
}
2011-11-8 15:49
0
游客
登录 | 注册 方可回帖
返回
//