【发布时间】:2017-07-30 19:12:07
【问题描述】:
我想知道当我将 fgets 中的缓冲区大小设置为 n 字节并且用户输入 2n 字节时如何处理? fgets 将读取前 n 个字节,其他 n 个字节将保留在标准输入中,对吗?在每次 fgets 之后刷新标准输入是否是个好主意,是否有其他选项来处理这种情况?
【问题讨论】:
-
不要刷新标准输入,这是未定义的行为。相反,使用 fgetc() 循环直到 EOF。
-
@Jean-FrançoisFabre EOL 大概...
-
这取决于你想做什么?丢弃其余的行?调整输入缓冲区的大小?
-
在这种情况下,我通常会增大输入缓冲区(例如,使用 realloc 将大小翻倍)并继续读取。是的,剩余的字节保留在标准输入中,可以被后续的 fgets 调用读取。
-
一个好的答案需要解决程序的更高级别的目标 - 没有说明。附加计划的目标以获得好的适用想法 - 否则这太宽泛了。
标签: c