4

Cでコンソールとファイルに書き込むことができる関数を作成しようとしています.

次のコードがありますが、引数を追加できないことに気付きました (printf など)。

#include <stdio.h>

int footprint (FILE *outfile, char inarray[]) {
    printf("%s", inarray[]);
    fprintf(outfile, "%s", inarray[]);
}

int main (int argc, char *argv[]) {

    FILE *outfile;
    char *mode = "a+";
    char outputFilename[] = "/tmp/footprint.log";
    outfile = fopen(outputFilename, mode);

    char bigfoot[] = "It Smells!\n";
    int howbad = 10;

    footprint(outfile, "\n--------\n");

    /* then i realized that i can't send the arguments to fn:footprints */
    footprint(outfile, "%s %i",bigfoot, howbad); /* error here! I can't send bigfoot and howbad*/

    return 0;
}

私はここで立ち往生しています。任意のヒント?function:footprints に送信する引数は、文字列、文字、および整数で構成されます。

ラッパーを作成できる他の printf または fprintf fns はありますか?

ありがとうございます。返信をお待ちしております。

4

4 に答える 4

5

<stdarg.h>機能とvprintfおよびを使用できますvfprintf。例えば

void footprint (FILE * restrict outfile, const char * restrict format, ...) {

    va_list ap1, ap2;

    va_start(ap1, format);
    va_copy(ap2, ap1);

    vprintf(format, ap1);
    vfprintf(outfile, format, ap2);

    va_end(ap2);
    va_end(ap1);
}
于 2011-01-05T09:16:38.450 に答える
0

printf、scanf などの関数は可変長引数を使用します。これは、可変長の引数を取る独自の関数を作成する方法に関するチュートリアルです

于 2011-01-05T09:16:41.363 に答える
0

はい、いくつかのバージョンがありprintfます。あなたが探しているものはおそらくvfprintf次のとおりです。

int vfprintf(FILE *stream, const char *format, va_list ap);

のような関数はprintf、可変関数である必要があります (つまり、動的な数のパラメーターを取る)。


ここに例があります:

int print( FILE *outfile, char *format, ... ) {
    va_list args;
    va_start (args, format);
    printf( outfil, format, args );
    va_end (args);
}

これはprintfとして正確に唯一のパラメータを取ることに注意してください.これで整数配列を直接印刷することはできません.

于 2011-01-05T09:17:01.787 に答える
-1

文字列を指す char ポイントを渡すことができますか?

例(構文はチェックされていませんが、アイデアを提供するため)

    #include <stdio.h>

int footprint (FILE *outfile, char * inarray) {
    printf("%s", inarray);
    fprintf(outfile, "%s", inarray);
}

int main (int argc, char *argv[]) {

    FILE *outfile;
    char *mode = "a+";
    char outputFilename[] = "/tmp/footprint.log";
    outfile = fopen(outputFilename, mode);

    char bigfoot[] = "It Smells!\n";
    int howbad = 10;

    //footprint(outfile, "\n--------\n");
    char newString[255];
    sprintf(newString,"%s %i",bigfoot, howbad);

    footprint(outfile, newString); 

    return 0;
}
于 2011-01-05T09:17:07.927 に答える