我正在编写一个 HTTP 客户端,它基本上会转到网页并将内容下载到用户定义的单独文件中。我遇到的问题不是写入文件本身的行为,而是我遇到了一个奇怪的问题。我将在下面展示一些代码片段,但基本上当有一个
fprintf(stdout, "%s", htmlcontent);
其中 htmlcontent 定义为
char *htmlcontent;
它将整个 HTML 页面信息打印到标准输出。我还可以通过说 >myfile.txt 将此输出重定向到命令行中的文件(是的,我想比较文本文件而不是 html 文件)。
但是当我做这样的事情时:
fprintf(savedfile, "%s", htmlcontent);
其中保存的文件定义为
FILE *savedfile;
打开方式如下:
savedfile = fopen(filename, "w");
其中文件名定义为
char *filename;
并设置为等于与其对应的命令行参数。当我执行第二种类型的 fprintf 将其打印到我的文件而不是标准输出时,我没有得到相同的结果,而且我不明白为什么。有人可以帮助我理解为什么会有什么不同吗?如果您希望我发布这两个不同的程序,以便您可以完整地看到它们,请告诉我,我会这样做。
最佳答案
您还没有真正告诉我们两种输出方法之间有什么区别,但根据给出的信息,应该没有区别。
从功能上讲,写入 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
文件和程序的标准输出都包含相同的信息。
关于html - 在C中将字符串写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15916060/