【问题标题】:fgets to include text after newline [duplicate]fgets在换行符后包含文本[重复]
【发布时间】:2015-04-09 01:00:05
【问题描述】:

我想创建一个字符数组并将整个输入存储在其中(即使输入在某些时候包含“\n”。当我使用时:

char vhod[50];

fgets(vhod, sizeof(vhod), stdin);

它存储输入直到第一个换行符。如何获取此数组中的整个文本(包括换行后的文本)。 例子: 如果我的文字是:

Hello I need new keyboard.
This is not good.

我的数组将只包含"Hello I need new keyboard."。我希望能够阅读所有内容,直到输入 a

【问题讨论】:

  • 是什么让你认为在键盘输入时不能使用read()
  • 您不必调用open(),因为标准输入已经打开。
  • 如果您使用标准 I/O 库,那么fread() 是显而易见的选择,而不是文件描述符函数read()。当然,你需要小心不要溢出缓冲区; 50个字符相当小。或者你可以增量使用fgets();或者您可以考虑使用 POSIX 函数 getdelim()getline() 的近亲),将诸如 '\0' 之类的字符作为“行分隔符”传递,因此它会读取所有内容,直到空字节或 EOF。

标签: c input format fgets getline


【解决方案1】:

虽然fgets() 旨在读取最多'\n' 字符或指定的字节数,但您可以改用fread()1,就像这样

size_t count = fread(vhod, 1, sizeof(vhod), stdin);

count 将包含读取的项目数,在这种情况下与字节数相同,因为您提供了大小1sizeof(char)

但是请注意,如果您要使用假定终止 '\0' 的任何函数,则必须非常小心地添加终止 '\0'


1阅读手册了解更多信息。

【讨论】:

  • 非常感谢,不知道fread什么都能搞定
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2019-02-11
相关资源
最近更新 更多