1

関数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

4 に答える 4

3

渡すストリームに応じて、dumparrayをstdoutまたはテキストファイルに書き込むように書き換えることができます。

したがって、すべてのprintf呼び出しをfprintfに変更し、最初の引数としてストリームを渡します。

于 2012-05-03T23:13:16.310 に答える
2

最初の関数は、その出力をにダンプしてstdout何も返さないため、fprintfキャプチャできる出力にはなりません。

これらすべての文字列の長さを把握し、printfそれに適切な量のメモリを割り当ててからsprintf、文字列を返す必要があります。

または、代わりにファイルに書き込む-like関数をdumpArray指すように関数ポインタを渡す必要があります。printf

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

...

dumpArray(printfLike);

その性質の何か。

于 2012-05-03T23:14:32.983 に答える
1

fprintfの関数宣言は、char *引数が必要であると述べていますが、dumpArray()はchar*を返していません。

int fprintf(FILE *ストリーム、const char *フォーマット、...);

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);
于 2012-05-03T23:10:21.117 に答える
0

どこから始めますか?

fprintfとのページを検索してくださいprintf

dumpArray文字配列を元に戻すように変更します。何pですか?

それは初心者向けです-Cの教科書とCのマニュアルページを読み直してください

于 2012-05-03T23:12:59.030 に答える