Запись массива в файл на 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.
Следует проверить возвращаемое значение fopen.
Должно быть:
fprintf(fp, "%10d", p[i]);
Следует переместить fclose из внешнего цикла for.