2

C を使用しています。fscanf 関数のポインターの使用に問題があります。私がやろうとすると:

int *x;
/* ... */
fscanf(file, "%d", x[i]);

私のコンパイラは、「フォーマット引数はポインターではありません」という警告を出し、コードは実行されません (「Water.exe が動作を停止しました」というメッセージが表示されます)。x を *x に置き換えると、コンパイルされません... これは単なる構文の問題ですか?

4

2 に答える 2

12

単一の整数を読み取りたい場合は、次のようにします。

int x;
fscanf(file, "%d", &x );

必要に応じて、これを実行して、動的に割り当てられた変数で単一の整数を読み取ることができます。

int *x = malloc(sizeof(int));
fscanf(file, "%d", x );

整数の配列が必要な場合は、次のようにします。

int *x = malloc(sizeof(int) * DESIRED_ARRAY_SIZE);
fscanf(file, "%d", &x[i] );

%dへのポインタが必要ですが、intそれx[i]は であるintため、アドレス演算子 (単項&) を使用してリスト要素のアドレスを取得する必要があります。

于 2009-09-01T02:19:11.210 に答える
8

結果用にいくらかのスペースを割り当てる必要があります。

int *x; // declares x

x = malloc( 600000 * sizeof(int) ) // and allocates space for it

for (int i = 0; i < 600000; ++i ) {
    fscanf(file, "%d", &x[i] ); // read into ith element of x
}
于 2009-09-01T02:08:28.823 に答える