我想創建一個只需要一個隨機數的程序,所以我嘗試在主函數中使用argc的地址作爲隨機源,因爲我認爲程序在內存中的位置是隨機的,並且它可以節省一些包含語句,所以我嘗試:我可以在main中使用argc的地址作爲隨機源嗎?
#include <stdio.h>
int main(int argc,const char* argv[]){
printf("%lu\n",(unsigned long int)&argv/sizeof(unsigned long int));
return 0;
}
,但我發現,每次在輸出是不是很「亂」:他們是4的倍數:
17591828907268
17591841542404
17591845040388
17591834556676
的原因是什麼?並且使用argc的地址作爲隨機數可能?
然後我嘗試刪除地址的一些位:
#include <stdio.h>
int main(int argc,const char* argv[]){
printf("%lu\n",(unsigned long int)&argv >> 12);
return 0;
}
它看起來相當隨機的這段時間,至少它既有單雙號:
34359070631
34359034616
34359078055
34359080624
是「正確的」把argc的地址變成隨機數的方法?
有些信息你問'&argc'是一個很好的種子使用'srand()函數'? –
程序在內存中的位置不可能是隨機的。操作系統使用一種算法來確定程序在內存中的位置,該算法反映了操作系統選擇的一些策略。 – Dko
真的沒有「一個隨機數」這樣的東西。有隨機的數字序列。如果程序的每次運行只需要一個數字,則必須從程序外部生成的序列中選擇它。 John Hascall對/ dev/random的建議是一個很好的選擇。像random.com是另一回事。 –