html - 在C中将字符串写入文件

标签 html c file creation

我正在编写一个 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/

相关文章:

java - 使用 while 循环读取一个文件,写入另一个文件

html - 页面上的多个 form_fors 导致 _method 属性出现问题

javascript - 图像无法正确调整到 div 的高度

C:带有无符号操作数的一元减运算符行为

python - 如何在不使用for循环的情况下搜索一个csv文件到另一个csv文件的共同记录

javascript - 加载本地文件时出现"Cross origin requests are only supported for HTTP."错误

javascript - 在移动浏览器上自动播放视频元素

php显示mysql数据库的结果

c - SQLite C API,可以打开数据库但不使用查询返回任何数据吗?

您可以在 XP 上调整 C 运行时堆段保留大小吗?