将数组写入C中的文件

时间:2013-10-27 23:38:35

标签: c arrays file output

我试图将一个前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搜索都没有取得丰硕成果。任何帮助将不胜感激。

4 个答案:

答案 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)

  1. 应检查fopen的返回值。

  2. 应该是:

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

  3. 应将fclose移出外部for循环。