random在CTF中经常出现,所以今天我想深度的研究这个函数。
srand()函数
原型:
void srand(unsigned seed);
给rand()函数设置种子。
rand()函数
原型:
int rand(void);
在执行前,会先查看是否使用了srand()函数。
1.使用了srand(seed),就按照这个东西来产生随机数。
2.没有使用srand(seed),就默认使用了srand(1)来产生随机数。
time函数
原型:
time_t time(time_t *timer)
timer=NULL:得到当前日历时间(从1970-01-01 00:00:00到现在的秒数)
对于rand(),我们有两种用法:
两种用法:
- rand()
返回值:一个随机值
示例代码1:没有使用srand(seed)
int targetnum=rand();
printf("%d",targetnum);
输出值不随机,是41
示例代码2:使用srand(1)
srand(1);
int targetnum=rand();
printf("%d",targetnum);
输出值不随机,是41
示例代码3:使用srand(2)
srand(1);
int targetnum=rand();
printf("%d",targetnum);
输出值不随机,是45
示例代码4:使用srand((unsigned int)time(NULL))
srand((unsigned int)time(NULL));
int targetnum=rand();
printf("%d",targetnum);
输出值随机。
- 例如:rand()%100
返回值:0-99的随机值
示例代码1:没有使用srand(seed)
//srand(1);
int targetnum=rand();
int i = 0;
for(;i < 5;++i){
int num = rand() % 20 + 1;
printf("%d ",num);
}
printf("\n");
return 0;
输出值不随机,是8 15 1 10 5
示例代码2:使用srand(1)
srand(1);
int targetnum=rand();
int i = 0;
for(;i < 5;++i){
int num = rand() % 20 + 1;
printf("%d ",num);
}
printf("\n");
return 0;
输出值不随机,是8 15 1 10 5
示例代码3:使用srand(2)
srand(2);
int targetnum=rand();
int i = 0;
for(;i < 5;++i){
int num = rand() % 20 + 1;
printf("%d ",num);
}
printf("\n");
return 0;
输出值不随机,是17 19 16 5 11
。
示例代码4:使用srand((unsigned int)time(NULL))
srand((unsigned int)time(NULL));
int targetnum=rand();
int i = 0;
for(;i < 5;++i){
int num = rand() % 20 + 1;
printf("%d ",num);
}
printf("\n");
return 0;
输出值随机,是1-20范围内。