关于c语言gcc随机数:
C 语言的 vararg(变长参数)不包含长度信息,所以即便没传参数 printf 也不会知道,它仍然会傻傻地读取预定的位置,在 32 位下这个位置应该是 ebp + 12,在 64 位下则是 rsi 寄存器。
通常来讲这个内容不会变,至于为什么实际运行中在变,是因为 Linux 默认开启了名为 ASLR 的安全手段,在每次程序启动时都给程序基址附加了一个随机的偏移,提高内存漏洞的利用难度。将它关掉就会发现数字稳定下来了。
假设要生成的随机数是大于等于20且小于等于100的整数 #include<stdio.h> #include<time.h> #include<stdlib.h> void main() { int a,b,x; a=20; b=100; srand((unsigned int)time(NULL)); //用当前时间生成一个随机数种子 x=rand()%(b-a+1)+a; printf("得到一个随机数:%dn",x); }