0

我正在编写一个基本上进入网页并将内容下载到用户定义的单独文件的 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;

并设置为与其对应的命令行参数。当我执行第二种类型的 fprintf 将其打印到我的文件而不是标准输出时,我没有得到同样的结果,我不知道为什么。谁能帮我理解为什么会有任何区别?如果您希望我发布这两个不同的程序,以便您可以完整地查看它们,请告诉我,我会这样做。

4

1 回答 1

1

您还没有真正告诉我们这两种输出方法之间有什么区别,但是根据给出的信息,应该没有区别。

从功能上讲,写入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 回答