1

我正在尝试将前 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 *, ...)
     ^

许多谷歌搜索都没有结果。任何帮助将非常感激。

4

4 回答 4

4

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

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
于 2013-10-27T23:54:54.823 回答
1

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

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

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

于 2013-10-27T23:41:30.193 回答
0
  1. 应该检查 fopen 的返回值。

  2. 应该:

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

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

于 2013-10-28T01:23:56.687 回答
0

正确的。当您调用 fprintf 时,C 编译器所看到的所有内容都是字符串文字 (a char*),它并非旨在推断字符串引用文件名。这就是 fopen 的用途;它为您提供了一种特殊类型的指针,指示打开的文件。请注意,您的代码在打开文件后实际上并没有对 fp 做任何事情,除了关闭它。因此,您只需在调用 fprintf时替换fp为 for 。filename

于 2013-10-27T23:57:20.897 回答