在C中将字符串写入文件

时间:2013-04-10 02:47:33

标签: html c file creation

我正在编写一个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打印到我的文件而不是标准输出时,我没有得到相同的东西,我无法弄清楚为什么。任何人都可以帮助我理解为什么会有任何区别?如果您希望我发布两个不同的程序,以便您可以完整地看到它们,请告诉我,我会这样做。

1 个答案:

答案 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文件和程序的标准输出都包含相同的信息。