1

最初の N 個の素数の配列を、各エントリ間に 10 個のスペースを入れて、それぞれ 5 エントリの行で txt ファイルに書き込もうとしています。関連するコードは次のとおりです。

#include<stdio.h>
#include<math.h>

#define N 1000

...

void writePrimesToFile(int p[N], char filename[80])
{
    int i;
    FILE *fp = fopen(filename, "w");
    for(i = 0; i<=N-1; i++)
    {
        for(i = 0; i<5; i++)
        {
            fprintf(filename, "%10%i", p[i]);
        }
        printf("/n");
    fclose(fp);
    }


    printf("Writing array of primes to file.\n");
}

コンパイラは次のエラーをスローします。

primes.c:40:4: warning: passing argument 1 of ‘fprintf’ from incompatible pointer type [enabled by default]
    fprintf(filename, "%10%i", p[i]);
    ^
In file included from /usr/include/stdio.h:29:0,
                 from primes.c:1:
/usr/include/stdio.h:169:5: note: expected ‘struct FILE *’ but argument is of type ‘char *’
 int _EXFUN(fprintf, (FILE *, const char *, ...)
     ^

数多くの Google 検索は実りがありませんでした。どんな助けでも大歓迎です。

4

4 に答える 4

1

FILE *ファイルを開いたときに取得した を使用する必要があります。

   fprintf(fp, "%10%i", p[i]);

エラーメッセージは、fprintf関数が aFILE *ではなく a を期待していることを示していますchar *(または、同じものは achar[]です)。

于 2013-10-27T23:41:30.193 に答える
0

右。fprintf を呼び出したときに C コンパイラが認識するのは文字列リテラル (a char*) だけであり、文字列がファイル名を参照していると推測するようには設計されていません。それが fopen の目的です。開いているファイルを示す特別なタイプのポインターを提供します。ファイルを開いた後、ファイルを閉じることを除いて、コードは fp で実際には何もしないことに注意してください。そのため、fprintf の呼び出しfpで forを代入するだけです。filename

于 2013-10-27T23:57:20.897 に答える
0
  1. fopen の戻り値を確認する必要があります。

  2. 次のようにする必要があります。

    fprintf(fp, "%10d", p[i]);

  3. fclose を外側の for ループの外に移動する必要があります。

于 2013-10-28T01:23:56.687 に答える