0

基本的にWebページにアクセスし、ユーザーが定義する別のファイルにコンテンツをダウンロードするHTTPクライアントを作成中です。ファイルへの書き込み自体に問題はありませんが、奇妙な問題が発生しています。以下にいくつかのコード スニペットを示しますが、基本的には

    fprintf(stdout, "%s", htmlcontent);

ここで、htmlcontent は次のように定義されます

    char *htmlcontent;

HTML ページ情報全体を標準出力に出力します。コマンド ラインで >myfile.txt と指定して、この出力をファイルにリダイレクトすることもできます (はい、html ファイルではなくテキスト ファイルを比較します)。

しかし、私がこのようなことをすると:

    fprintf(savedfile, "%s", htmlcontent);

ここで、savedfile は次のように定義されます

    FILE *savedfile;

次のように開きます。

    savedfile = fopen(filename, "w");

ここで、ファイル名は次のように定義されます

    char *filename;

それに対応するコマンドライン引数と等しく設定されます。標準出力ではなくファイルに出力するために 2 番目のタイプの fprintf を実行すると、同じ結果が得られず、その理由がわかりません。なぜ違いがあるのか​​ を理解するのを手伝ってくれる人はいますか?2 つの異なるプログラムを投稿して全体を確認できるようにしたい場合は、私に知らせてください。

4

1 に答える 1

1

2 つの出力方法の違いを実際に教えてはくれませんでしたが、与えられた情報に基づいて、違いはないはずです

機能的には、書き込みstdoutと他の適切に開かれた出力ストリームに違いはありません (バッファリングなどの動作上の違いはありますが、出力には影響しません)。

次のトランスクリプトは、これが実際に行われていることを示しています。

pax> cat xyzzy.c
#include <stdio.h>

int main (void) {
    char *filename = "xyzzy.txt";
    char *html = "<tag>some markup</tag>\n";

    FILE *xyzzy = fopen (filename, "w"); // should error check

    fprintf (stdout, "%s", html);
    fprintf (xyzzy, "%s", html);

    fclose (xyzzy);

    return 0;
}

pax> ./xyzzy
<tag>some markup</tag>

pax> cat xyzzy.txt
<tag>some markup</tag>

ご覧のとおり、xyzzy.txtファイルとプログラムの標準出力の両方に同じ情報が含まれています。

于 2013-04-10T03:01:19.750 に答える