首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么fflush()不安全?

为什么fflush()不安全?
EN

Stack Overflow用户
提问于 2014-02-24 19:36:32
回答 2查看 1.2K关注 0票数 3

为什么fflush()不安全?有人告诉我,它表现出不明确的行为?如果是这样,那么fflush()的替代方案是什么?

EN

回答 2

Stack Overflow用户

发布于 2014-02-24 19:38:14

您可能被告知fflush(stdin)是未定义的,这是正确的。但是fflush是用于您想要刷新的其他流的方法,例如stdout

为了澄清,流必须用于输出。标准上说:

如果流指向未输入最新操作的输出流或更新流,fflush函数将导致将该流的任何未写入数据传递到要写入文件的主机环境;否则,行为将未定义。

稍后,标准将此显式地包含为“未指定的行为”:

fflush函数的流指向输入流或更新流,其中最近的操作是输入

票数 7
EN

Stack Overflow用户

发布于 2014-02-24 19:41:44

你误会了。

在输入流上调用fflush()具有未定义的行为,就C标准而言,某些系统和/或辅助标准(如POSIX )可能定义它的行为,但在打算可移植的代码中依赖这种行为不是一个好主意。

在输出流上调用fflush() (例如,fflush(stdout) )是完全安全的,并且定义得很好。它会导致将任何挂起的输出传递到操作系统(这并不保证它将被传递到物理输出设备)。

在某些情况下,在输入流上调用fflush时,应该实际读取和丢弃输入字符,直到看到换行符'\n'EOF为止。或者,通常更好的做法是使用fgets或类似的东西一次读取整行,然后解析输入。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21997286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档