我正在编写一个HTTP客户端,它基本上转到网页并将内容下载到用户定义的单独文件中。我没有处理写入文件本身的行为,但我遇到了一个奇怪的问题。我将在下面展示几个代码片段,但基本上是在有
时 fprintf(stdout, "%s", htmlcontent);
其中htmlcontent定义为
char *htmlcontent;
它将整个HTML页面信息打印到标准输出。我还可以通过说> myfile.txt(是的,我想比较文本文件而不是html文件)将此输出重定向到命令行中的文件。
但是当我做这样的事情时:
fprintf(savedfile, "%s", htmlcontent);
其中savedfile定义为
FILE *savedfile;
它就像这样打开:
savedfile = fopen(filename, "w");
其中filename定义为
char *filename;
并设置为等于与其对应的命令行参数。当我做第二种类型的fprintf打印到我的文件而不是标准输出时,我没有得到相同的东西,我无法弄清楚为什么。任何人都可以帮助我理解为什么会有任何区别?如果您希望我发布两个不同的程序,以便您可以完整地看到它们,请告诉我,我会这样做。
答案 0 :(得分: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
文件和程序的标准输出都包含相同的信息。