fgets 和 fread 之间的区别

2024-04-29

我有以下代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    int lendata;
    printf("Content-type:text/html\n\n");
    printf("<html><body>");

    lendata = atoi(getenv("CONTENT_LENGTH"));
    char *buf = malloc(lendata+1);
    fread(buf,lendata,1,stdin);

    printf("%s\n<br>",buf); 
    printf("%d",lendata);   

    free(buf);

    printf("</body></html>");
    return 0;
}

当我使用fgets,它会截断显示的数据。但是当我使用fread,它显示所有内容。顺便说一句,这是使用 post 方法上传 html 文件的 CGI 脚本。任何帮助将不胜感激。


这两个函数都有详细的文档记录(fread http://www.cplusplus.com/reference/cstdio/fread/, fgets http://www.cplusplus.com/reference/cstdio/fgets/)在 C++ 网站上。请参阅它们以了解深度和技术差异。

简而言之,fgets将读取直到第一个新行,一次读取的最大字节数,或者EOF,以先发送者为准,而fread将读取特定数量的words(其中我将一个单词定义为一个字节块,例如 4 个字节的组)并在达到该限制或已读取 0 个字节时停止(通常意味着EOF或错误)。

如果您想使用任一函数来读取直到EOF那么它看起来如下:

char buffer[ buff_len ];

// ... zero-fill buffer here.

while ( fgets( buffer, buff_len, stdin ) != EOF ) {
  // ... do something with buffer (will be NULL terminated).
}

while ( fread( buffer, sizeof( buffer[ 0 ] ), sizeof( buffer ) / sizeof( buffer[ 0 ] ), stdin ) != 0 ) {
  // ... do something with buffer (not necessarily NULL terminated).
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fgets 和 fread 之间的区别 的相关文章

  • 获取数组变量的地址是什么意思?

    今天我读到了一段让我很困惑的 C 代码片段 include
  • WPF 中的屏幕分辨率问题?

    我将在 WPF 中使用以下代码检测分辨率 double height System Windows SystemParameters PrimaryScreenHeight double width System Windows Syste
  • 具有不同大小结构的结构数组的 malloc()

    如果每个结构都包含一个大小不同的字符串数组 那么如何正确地 malloc 一个结构数组 因此每个结构可能有不同的大小 并且不可能 realloc 结构体数量 sizeof 结构体名称 after malloc 初始大小 sizeof 结构名
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • 如何生成 appsettings..json 文件?

    我有一个 ASP NET Core 2 WebAPI 它将部署在以下环境中 INT QA STAGE 生产环境 基于上述 我需要有appsettings
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • 无法解析远程名称 - webclient

    我面临这个错误 The remote name could not be resolved russgates85 001 site1 smarterasp net 当我请求使用 Web 客户端读取 html 内容时 出现错误 下面是我的代
  • TcpClient 在异步读取期间断开连接

    我有几个关于完成 tcp 连接的问题 客户端使用 Tcp 连接到我的服务器 在接受客户端后listener BeginAcceptTcpClient ConnectionEstabilishedCallback null 我开始阅读netw
  • 两种类型的回发事件

    1 我发现了两篇文章 每篇文章对两种类型的回发事件的分类都略有不同 一位资源说两种类型的回发事件是Changed事件 其中控件实现 IPostbackDataHandler 当数据在回发之间更改时触发 然后Raised事件 其中控件实现 I
  • libxml2 xmlChar * 到 std::wstring

    libxml2似乎将所有字符串存储在 UTF 8 中 如xmlChar xmlChar This is a basic byte in an UTF 8 encoded string It s unsigned allowing to pi
  • C# 中的常量和只读? [复制]

    这个问题在这里已经有答案了 可能的重复 const 和 readonly 之间有什么区别 https stackoverflow com questions 55984 what is the difference between cons
  • 如何随着分辨率的变化自动调整大小和调整表单控件

    我注意到某些应用程序会更改控件的位置以尽可能适应当前的分辨率 例如 如果窗口最大化 则控件的设置方式应使整个 GUI 看起来平衡 是否可以使用 C 在 Visual studio 2010 中制作或实现此功能 Use Dock http m
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • 如何引用解决方案之外的项目?

    我有一个 Visual Studio C 解决方案 其中包含一些项目 其中一个项目需要引用另一个不属于解决方案的项目 一开始我引用了dll
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构

随机推荐

  • 使用 ggplot2 表示散点图中每个点的小饼图

    我想创建一个散点图 其中每个点都是一个小饼图 例如考虑以下数据 foo lt data frame X runif 30 Y runif 30 A runif 30 B runif 30 C runif 30 下面的代码将绘制一个散点图 代
  • 尽管有 FOLLOWLOCATION,但仍使用 cURL 获取 301

    尽管使用了 FOLLOWLOCATION 和 MAXREDIRS 我还是收到了 301 错误 我不知道该怎么做 我尝试了一切我能做的 HEADER为0 FOLLOWLOCATION为1 MAXREDIRS为30 多次更改USERAGENT
  • 如何在MVVM架构中将animationview play与LottieForms绑定?

    所以我在列表视图中处理动画 并且我想随时播放一次 所以我想控制它 这是图书馆https github com martijn00 LottieXamarin https github com martijn00 LottieXamarin
  • 在 CAKeyFrameAnimation 期间检测碰撞

    当一个 UIImageView 在 CAKeyFrameAnimation 期间沿一条路径行进时 是否可以检测到两个 UIImageView 的碰撞 如果是这样 这是如何完成的 我尝试了多种方法 包括在动画期间检查 CGRect 是否发生碰
  • 如何删除我的产品中未使用的 CSS 类?

    我只想删除我的产品中未使用的 CSS 类 它不是 HTML 文件 它有 jsp XML 和 js 文件 我的产品中有很多未使用的类 手动删除它们需要很长时间 Dust Me 选择器 http www sitepoint com dustme
  • 什么触发了java垃圾收集器

    我对 Java 中垃圾收集的工作原理有点困惑 我知道当不再有对某个对象的实时引用时 该对象就有资格进行垃圾回收 但是如果它有对实时对象的引用怎么办 可以说我有一个节点集合 它们再次引用更多节点 List 1 gt Node a gt Nod
  • 在轮询 SCM 时将 ssh-agent 与 jenkins 结合使用

    我使用 Jenkins ssh agent 插件来为我的构建提供 ssh 凭证 该凭证运行良好 但是我将其设置为轮询 scm 在本例中为 bitbucket git 以检查更改 当然 要访问存储库以轮询更改 它还需要这些 ssh 凭据 我似
  • ios 如何为文本字段添加底部边框和侧面设计

    我想添加底部边框 如下图所示 我已成功添加底线 但我没有得到侧面小线 这是我的代码 CALayer border CALayer layer CGFloat borderWidth 1 border borderColor UIColor
  • Swift:ViewModel 应该是结构体还是类?

    我正在尝试在我的新项目中使用 MVVM 模式 第一次 我创建了所有的视图模型来构建 但是 当我使用闭包实现异步业务逻辑 例如 fetchDataFromNetwork 时 闭包捕获旧视图模型值 然后更新为该值 不是新的视图模型值 这是操场上
  • 将订单总重量添加到 WooCommerce 新订单电子邮件通知

    是否可以在 WooCommerce 新订单 电子邮件通知 针对管理员 中显示订单的总重量 这是挂钩在 woocommerce email after order table 操作挂钩中的自定义函数 它将在 新订单 电子邮件通知中显示总重量
  • 使用 Java 重新启动 Tomcat

    我需要从 Java 代码重新启动 tomcat 例如 如果某个查询在一段时间内没有执行 那么它将自动重新启动 tomcat 我已经尝试了以下关闭和启动代码 但是当我们关闭tomcat时 java代码将不会运行并且tomcat不会启动 注意
  • 在 python matplotlib 中格式化损坏的 y 轴

    我正在 matplotlib 中处理一个 相当复杂的 条形图 它包含来自多个源的摘要数据 每个源都沿 x 轴标记 y 轴上有一系列结果 许多结果都是异常值 我尝试使用断开的 y 轴来显示这些结果 而不会使用以下组合来扭曲整个图表这个方法 h
  • 使用 Javascript OAuth 2.0 SDK 更新签名请求

    随着新的 Javascript SDK 和 OAuth 2 0 的发布 我想知道是否可以在不重定向用户的情况下更新 SignedRequest 和 authtoken 因此我使用了以下方法 基本上 这是我的应用程序的一种保持活动状态的方法
  • jquery 是否有 .toggle() 的替代方案[重复]

    这个问题在这里已经有答案了 目前根据 Jquerysite http api jquery com category deprecated deprecated 1 8 toggle 在 1 8 版本后已被弃用 那么有没有 toggle 的
  • Windows 消息

    我需要发送带有自定义 ID 的自定义 Windows 消息 其他应用程序将侦听该消息 Windows 是否为内部消息保留任何预定义的消息 ID 范围 如 SQL Server 那样 内部消息最多为 50 000 The 文档 https m
  • Mysql:磁盘已满错误

    我的 mysql 服务器有一些问题 120310 6 55 36 ERROR usr libexec mysqld Disk is full writing virtual cdrs MYD Errcode 28 Waiting for s
  • Git 责备文件中的作者列表

    有没有办法找到在 repo 中编辑 java 文件中的类的作者列表git blame 作者列表必须是唯一的 我尝试使用以下命令 但它没有删除重复项 并且每行输出中都有 作者 一词 不需要对输出进行排序 但我希望获得没有任何重复的输出 git
  • std::vector 错误 C2582:“operator =”函数在以下位置不可用

    我使用简单的向量push back到类型A的对象 并收到此错误 这是我的代码 class A public A int a int b int c include A h std vector a vec objects new std v
  • 数据映射器和连接池逻辑

    所以我尝试在 Rails 3 2 8 应用程序中使用 datamapper 我有一个config initializers dm rb我加载的地方database yml hash YAML load File new database y
  • fgets 和 fread 之间的区别

    我有以下代码 include