6

私は現在、「ダミーのための C オールインワン デスク リファレンス」で C を学習しており、乱数の取得方法を教え始めるところまで来ました。ただし、提供されるサンプル コードは機能しません (コンパイラは「「ランダム」への未定義の参照」というエラーを表示します)。私のコードは以下の本からコピーしたものです。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int hat;

    hat = random();
    printf("%d is a random number.\n",hat);
    return(0);
}
4

4 に答える 4

6

randomおよびsrandom非標準の C 関数です。これらは、多くのプラットフォーム (Linux、BSD など) の glibc に含まれています。ただし、これらは C 標準の一部ではないため、すべてのコンパイラで使用できる必要はありません。

ただし、すべての標準 C コンパイラには と が付属してrandいるsrandため、プログラムをrandの代わりに呼び出すように変更してくださいrandom。書籍内の他のサンプル プログラムが を呼び出す場合は、代わりsrandomに を使用してください。srand

プログラムを次のように変更します

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int hat;

    hat = rand();
    printf("%d is a random number.\n",hat);
    return(0);
}

あなたの本の次のプログラムはおそらく、srandom生成された疑似乱数を本当にランダムにするための呼び出しを追加します。その場合は、srand代わりに使用してください。

C の初心者向けの本で実際にrandomandが使用されている場合srandomは、おそらく破棄する必要があります。また、非標準であることを知らずに C を使用している C に関する本はすべてrandom廃棄する必要があります。srandom

于 2013-09-13T23:35:09.927 に答える
2

random()関数とそのシード関数はsrandom()POSIX で指定されています。rand()これは、標準 C関数のほとんどの実装よりも優れた乱数ジェネレーターになることを目的としています。random()は、C ライブラリの GNU 実装に含まれています (一般に と呼ばれますglibc)。rand()ランダム性に依存するアプリケーションをコーディングするときに使用rand()すると、C 標準で提供するために実際に最小限必要とされるものよりも優れたランダム プロパティをアプリケーションが期待している場合、危険な場合があります。

Windows システムは、この特定のインターフェイスを提供しません。CrtypGenRandom()代わりに使用できます。

random()およびの詳細についてCryptGenRandom()は、このトピックに関するSEI の CERT C セキュア コーディング標準ページを参照してください。

于 2013-09-14T00:06:23.647 に答える