私はランダムな数だけ必要なプログラムを作成したいので、メモリ内のプログラムの場所がランダムであり、いくつかのものを保存できると思いますので、main関数のargcのアドレスをランダムなソースとして使用しようとしますメインで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のアドレスを乱数に変換する方法は?
いくつかの情報は、あなたが求めていますか? –
メモリ内のプログラムの場所はランダムではありません。 OSはアルゴリズムを使用してメモリ内のどこにプログラムが配置されているかを決定し、そのアルゴリズムはOSによって選択された戦略を反映します。 – Dko
実際には「1つの乱数」はありません。ランダムな数列があります。プログラムの実行ごとに1つの番号だけが必要な場合は、プログラムの外で生成されたシーケンスから選択する必要があります。 John Hascallの/ dev/randomの提案は優れた選択です。 random.comのようなものが別のものです。 –