Запись массива в файл на C

Я пытаюсь записать массив первых N простых чисел в текстовый файл в строках по 5 записей в каждой, с 10 пробелами между каждой записью. Соответствующий код выглядит следующим образом:

#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 ответа

Проверьте вывод fopen() перед тем как использовать fp:

FILE *fp = fopen(filename, "w");  

if(fp)
{
//continue with stuff
//...

}

Также измените:

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

в

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

Вы должны использовать FILE * что вы получили, когда открыли файл.

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

Сообщение об ошибке гласит, что fprintf функция ожидает FILE *не char * (или, что то же самое, char[]).

Правильно. Все, что видит компилятор C, когда вы вызываете fprintf, это строковый литерал (char*) и он не предназначен для вывода, что строка ссылается на имя файла. Вот для чего fopen; это дает вам специальный тип указателя, который указывает на открытый файл. Обратите внимание, что ваш код на самом деле ничего не делает с fp после открытия файла, кроме как закрыть его. Так что вам просто нужно заменить fp в течение filename в вашем звонке на fprintf.

  1. Следует проверить возвращаемое значение fopen.

  2. Должно быть:

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

  3. Следует переместить fclose из внешнего цикла for.

Другие вопросы по тегам