如何将函数传递给fprintf

时间:2012-05-03 23:05:11

标签: c printf

我有我的函数dumpArray();这样做:

void dumpArray(void)
{
       while(p <= i)
       {
           printf("%i:", packet[p].source);
           printf("%i:", packet[p].dest);
           printf("%i:", packet[p].type);
           printf("%i\n", packet[p].port);
           p++;
       }
}

我正试图将其传递给fprintf();就这样:

void fWrite(void)
{
    char fileName[30] = { '\0' };
    printf("Please specify a filename: ");
    scanf("%s", fileName) ;
    FILE *txtFile;
    txtFile = fopen(fileName, "w");
    if (txtFile == NULL)
    {
        printf("Can't open file!");
        exit(1);
    }
    else fprintf(txtFile, dumpArray());
}

我正在尝试写dumpArray()的结果;进入档案。
任何人都可以看到我出错的地方,并指出我正确的方向。

4 个答案:

答案 0 :(得分:3)

您可以根据传入的流来重写dumparray以写入stdout或文本文件。

因此,您可以将所有printf调用更改为fprintf,并将该流作为第一个参数传递。

答案 1 :(得分:2)

您的第一个函数是将其输出转储到stdout并且不返回任何内容,因此它不会导致fprintf可以捕获的输出。

您需要弄清楚所有这些printf字符串的长度,并为sprintf分配适当的内存量,然后返回字符串。

或者,您应该将一个函数指针传递给dumpArray指向printf的函数,该函数将改为写入文件:

void printfLike(format, data) {
    fprintf(fileConst, format, data);
}

...

dumpArray(printfLike);

那种性质。

答案 2 :(得分:1)

fprintf的函数声明声明它需要一些char *参数但dumpArray()没有返回char *。

int fprintf(FILE * stream,const char * format,...);

如果要在dumpArray()中写入文件,可以将txtFile传递给dumpArray()并在函数内部执行fprintf。或者,您可以先在缓冲区(例如char [])中收集要写入文件的所有数据,然后再将其写入。

例如:

void dumpArray(FILE * txtFile)
{
       while(p <= i)
       {
           fprintf(txtFile, packet[p].source);
           fprintf(txtFile, packet[p].dest);
           fprintf(txtFile, packet[p].type);
           fprintf(txtFile, packet[p].port);
           fprintf(txtFile, "\n");
         p++;
       }
}

void fWrite(void)
{
    char fileName[30] = { '\0' };
    printf("Please specify a filename: ");
    scanf("%s", fileName) ;
    FILE *txtFile;
    txtFile = fopen(fileName, "w");
    if (txtFile == NULL)
    {
        printf("Can't open file!");
        exit(1);
    }
    else dumpArray(txtFile);

答案 3 :(得分:0)

你从哪里开始?

请查看fprintfprintf的页面。

dumpArray更改为重新组合字符数组。什么是p

对于初学者来说 - 重新阅读C上的教科书以及C

上的手册页