0

Cで少しエラーがあります:

エラー:式は定数値でなければなりません

私は知っています、それは私の限界が一定の値でなければならないことを意味します、しかし私がこの状況にあるときどうやってそれを解決することができますか?

printf("Type limit: ");
scanf("%i",&limit);
int arr[limit];

ありがとう。

編集

みんな、別の問題、私がスパムした場合は申し訳ありません。

    int num,limit,i;
    printf("Type limit: ");
    scanf("%i",&limit);
    int *arr = (int*)malloc(limit*sizeof(int));
    for(i=0;i<limit;i++)
    {
        printf("Type num %i: ",i);
        arr[i] = scanf("%i",&num);
    }
    system("pause");
    return 0;

エラー4エラーc2109添え字には配列またはポインタ型が必要です

4

4 に答える 4

5

使用する必要がありますmalloc

printf("Type limit: ");
scanf("%i",&limit);
int *arr = malloc(sizeof(int) * limit);
于 2013-02-18T12:31:55.833 に答える
4

C99以降、自動保存期間のある可変長配列が許可されています。C89では、コンパイル時にサイズが不明な自動ストレージ期間の配列を割り当てることはできません。malloc動的に割り当てるために使用します。

printf("Type limit: ");
scanf("%i", &limit);

int* arr = malloc(limit * sizeof(int));

free(arr)そして、もう必要なくなったら、このメモリの割り当てを解除するために呼び出すことを忘れないでください。


ループ内でstdinから読み取られる値を使用してこの配列を初期化することについての質問に対して:

for(i = 0; i < limit; ++i)
    arr[i] = scanf("%i", &num);

各値を読み取り、それをnum変数に格納してから、1に割り当てられます。これは、 「正常に一致して割り当てられた入力項目の数」(この場合は1)を返すarr[i]ためです。配列要素に直接読み込むことができます。scanf

for(i = 0; i < limit; ++i)
    scanf("%i", &arr[i]);
于 2013-02-18T12:31:31.443 に答える
1

C89以前のバージョンのCは、配列の実行時のサイズ設定をサポートしていませんでした。コンパイラでC99(またはそれ以降)のサポートをオンにする必要があります。

Linuxを使用している場合は、次のいずれかを入力できます。

gcc -std=c99

また

c99

c99用に書かれたコードをコンパイルします。

GCCでstd=c99フラグを設定する

于 2013-02-18T12:38:34.510 に答える
0
int *arr=malloc( limit*sizeof(int) );

これにより、の配列に十分なメモリがヒープに割り当てられますlimit int。ただし、この配列は「動的」であり(サイズは実行時に設定されます)、不要になったときにこのメモリを「<コード>解放」するのはユーザーの責任です。変数arrは、そのメモリへの単なるポインタになります。 int arr1[10];一方int、スタック内の10のメモリ空間を分離すると、変数arr1はそのメモリになります。コンパイラはサイズを知る必要があります。それを関数に渡すと、int*それを「減衰」しint*,ます。つまり、最初の要素へのポインタです。arr1[0].

于 2013-02-18T12:32:31.537 に答える