将数组写入C中的文件

问题描述 投票:0回答:4

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

c arrays file output
4个回答
3
投票

在允许使用fp之前测试fopen()的输出:

FILE *fp = fopen(filename, "w");   
if(fp)//will be null if failed to open
{
    //continue with stuff
    //...    
}

fprintf(...)的第一个参数也是FILE *类型。更改:

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

fprintf(fp, "%i", p[i]);
        ^^//pointer to FILE struct

1
投票

您必须使用打开文件时获得的FILE *

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

错误消息指出fprintf函数需要的是FILE *,而不是char *(或者相同的是char[])。


0
投票

对。当您调用fprintf时,C编译器看到的所有内容都是字符串文字(char*),并且并非旨在推断字符串引用文件名。这就是fopen的目的。它为您提供了一种特殊类型的指示打开文件的指针。请注意,您的代码在打开文件后实际上不会对fp进行任何操作,除非将其关闭。因此,您只需在调用fprintf时用fp代替filename


0
投票
  1. 应检查fopen的返回值。

  2. 应该是:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.