是否可以使用 fgets 或 gets_s 正确读取空字符?

2023-11-28

假设我想读取stdin,并让用户输入包含空字符的字符串。这可以通过字符串输入函数实现吗fgets or gets_s?或者我必须使用例如fgetc or fread?

Someone here想做这个。


For fgets, yes. fgets被指定为如同重复的行为fgetc并将结果字符存储到数组中。对于空字符没有特殊规定,只是除了读取的字符外,在末尾(最后一个字符之后)存储一个空字符。

然而,要成功区分嵌入的空字符和终止符,需要做一些工作。

首先,预填充缓冲区'\n'(例如使用memset)。现在,当fgets返回,寻找第一个'\n'在缓冲区中(例如使用memchr).

  • 如果没有'\n', fgets由于填满输出缓冲区而停止,除了最后一个字节(空终止符)之外的所有内容都是从文件中读取的数据。

  • 如果第一个'\n'紧接着是'\0'(空终止),fgets由于到达换行符而停止,并且从文件中读取该换行符之前的所有内容。

  • 如果第一个'\n'后面没有一个'\0'(或者在缓冲区的末尾,或者后面跟着另一个'\n') then fgets由于 EOF 或错误而停止,并且直到该字节之前的所有内容'\n'(这必然是一个'\0')但不包括它,是从文件中读取的。

For gets_s,我不知道,我强烈建议不要使用它。 Microsoft 的附件 K“*_s”函数唯一广泛实现的版本甚至不符合他们纳入 C 标准附件的规范,并且据报道存在可能导致此方法不起作用的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用 fgets 或 gets_s 正确读取空字符? 的相关文章

随机推荐

  • 录制音频并以 Wav 或 MP3 形式上传到服务器

    我不确定我问的地方是否正确 但基本上我正在寻找有关最佳方法的建议 通过网站上的麦克风录制音频并将音频以 Wav 或 MP3 文件上传到服务器 有没有人对闪光灯有丰富的经验 这会很难做到吗 目前市场上有什么可以做到这一点吗 我正在考虑将其实现
  • 如何为“日期”创建索引?

    如何为 日期 创建索引 CentOS7 MongoDB服务器版本 3 4 2 db animals createIndex date ok 0 errmsg The field key must be an object but got s
  • web组件shadow dom中的rem

    我们知道我们可以设置font size on html as the rem基于普通 DOM 节点 我使用这个技巧使我的应用程序的字体更加灵活 可以通过 js 动态更改 然而 当我创建一个Web组件时 我发现rem即使我尝试添加样式 影子
  • GWT-RPC 与 HTTP 调用 - 哪个更好?

    我正在评估使用 GWT RPC 进行的调用和HTTP调用 我的 appln 服务作为 Java servlet 托管 我当前使用 HTTPProxy 连接从它们获取数据 我希望将它们转换为 GWT RPC 调用 如果这能带来性能改进 我想知
  • 云端点收集参数

    我正在使用 Google App Engine Cloud Endpoints 并且正在尝试接收集合参数 不确定我是否能做到这一点 我知道我可以返回列表或任何集合 This public List
  • 选择悬停项目之前的所有项目

    我有一个带有 5 个内联星的容器 我需要的是当你将鼠标悬停在一颗星星上时 该星星和它之前的所有星星都会获得不同的背景 我使用的是精灵 所以我改变了背景位置 Markup div class wpr span class star span
  • Gson:直接将String转换为JsonObject(无POJO)

    似乎无法弄清楚这一点 我正在尝试在 GSON 中进行 JSON 树操作 但在转换为之前 我不知道或没有 POJO 来将字符串转换为JsonObject 有没有办法直接从String to JsonObject 我尝试过以下 Scala 语法
  • Android 从资源中获取颜色列表

    我有一个颜色列表
  • 是否可以修改 beforeSend 回调中的 XMLHttpRequest 数据?

    是否可以通过修改 beforeSend 回调中的 XMLHttpRequest 对象来修改 Ajax 请求中发送的数据 如果是的话我该怎么做 是的 你可以修改它 签名beforeSend is actually 在 jQuery 1 4 中
  • catch事务连接后的SqlTransaction为null

    我有一个循环 我用不同的参数值调用存储过程 下次通话cmd ExecuteNonQuery 我使用事务来保存全部或回滚 并使用 checkBox2 始终保存 我发现一个问题 但找不到解决方案 在第一个问题之后 当 catch 块被触发时 事
  • CSS 过渡和 jQuery 淡入淡出之间的冲突

    我正在尝试创建一个带有小菜单的瓷砖墙display none一些基于其类别的元素 在我的 CSS 中 我有 CSS 转换 这会导致fadeIn and fadeOut不工作 如果我添加一个时间 该元素将需要那么长时间才能消失 但实际上并没有
  • VB6 Timer 控件是否创建单独的线程?

    有VB6吗Timer控件启动时创建一个单独的处理线程 VB6 定时器控件不是某种在后台线程上运行的忙等待循环 他们根本就没有真正 跑 据我所知 当您设置 Enabled True 或更改 Interval 如果它是 0 时 控件会调用 Se
  • 这是导入驻留在任意文件夹中的 python 脚本的正确方法吗?

    此片段来自较早的答案 大约有一年了 答案没有被接受 我是 Python 新手 我发现系统路径真的很痛苦 我在不同目录中的脚本中编写了一些函数 我希望能够将它们导入到新项目中 而不必费力 这是片段 def import path fullpa
  • 针对 Mac OS X 10.8 之前的目标进行编译时,Base.lproj/MainMenu.xib 不可用

    我对 Cocoa 开发非常陌生 我刚刚创建了 Cocoa 项目Xcode 5 我变了部署目标从 10 8 到 10 6 现在我收到这个警告 path to my project Base lproj MainMenu xib 在以下情况下不
  • SpringMVC Websockets 使用 Spring Security 进行用户身份验证消息传递

    我看过一些关于这个问题的帖子 但似乎没有一个真正直接回答这个问题 背景 我安装了 spring security 工作正常 并且在应用程序的其他部分顺利运行 我的用户名是 开发者 在 Java 7 Glassfish 4 Spring 4
  • 为什么在 hibernate-core 6.0.2 中删除了对 javax.persistence-api 的依赖

    将 hibernate core 从 5 6 9 Final 更新到 6 0 2 Final 后 我的 javax persistence Entity 导入无法解析 我发现在 hibernate core 6 0 2 Final 中删除了
  • 使用 Mono 运行 F# 代码

    我安装了 F 2 0 0 并使用 mono 2 8 let rec fib n match n with 1 2 gt 1 n gt fib n 1 fib n 2 let n 40 let x fib n printfn d x 我使用
  • 检测 macOS 鼠标光标下的颜色

    我想知道如何获取 OS X macOS 鼠标指针当前所在像素的颜色 我编写了一个控制台应用程序 所以我没有可以覆盖的窗口或其他东西 当我构建并运行该程序时 它应该为我提供鼠标指针当前所在颜色的控制台日志 那可能吗 Using 这个问题和答案
  • 如何向 iframe 中的 p 元素添加点击事件(使用 jQuery)

    如何添加点击事件 p iframe 中的元素 使用 jQuery 有一个特殊的 jQuery 函数可以做到这一点 contents 请参阅示例了解其工作原理 p
  • 是否可以使用 fgets 或 gets_s 正确读取空字符?

    假设我想读取stdin 并让用户输入包含空字符的字符串 这可以通过字符串输入函数实现吗fgets or gets s 或者我必须使用例如fgetc or fread Someone here想做这个 For fgets yes fgets被