我试图将一个前N个素数的数组写入一个txt文件,每行包含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搜索都没有取得丰硕成果。任何帮助将不胜感激。
答案 0 :(得分:2)
在允许使用fp之前测试fopen()
的输出:
FILE *fp = fopen(filename, "w");
if(fp)
{
//continue with stuff
//...
}
同样改变:
fprintf(filename, "%10%i", p[i]);
到
fprintf(fp, "%i", p[i]);
答案 1 :(得分:1)
您必须使用打开文件时获得的FILE *
。
fprintf(fp, "%10%i", p[i]);
错误消息指出fprintf
函数需要FILE *
,而不是char *
(或者,char[]
是什么。)
答案 2 :(得分:0)
右。当您调用fprintf时,所有C编译器都会看到一个字符串文字(char*
),并不是为了推断字符串引用文件名而设计的。这就是fopen的用途;它为您提供了一种特殊类型的指针,指示打开的文件。请注意,在打开文件后,您的代码实际上并没有对fp执行任何操作,除非关闭它。因此,您只需要在调用fprintf时将fp
替换为filename
。
答案 3 :(得分:0)
应检查fopen的返回值。
应该是:
fprintf(fp, "%10d", p[i]);
应将fclose移出外部for循环。