gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:56:31 32 4
gpt4 key购买 nike

假设我想从stdin 中读取,并让用户输入包含空字符的字符串。这是否可以通过 fgetsgets_s 等字符串输入函数实现?或者我必须使用例如fgetc 还是 fread

有人 here想这样做。

最佳答案

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

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

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

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

  • 如果第一个 '\n' 紧跟一个 '\0'(空终止),fgets 停止由于到达换行符,从文件中读取了通过该换行符的所有内容。

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

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

关于c - 是否可以使用 fgets 或 gets_s 正确读取空字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50160039/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com