为什么fflush()不安全?有人告诉我,它表现出不明确的行为?如果是这样,那么fflush()的替代方案是什么?
发布于 2014-02-24 19:38:14
您可能被告知fflush(stdin)是未定义的,这是正确的。但是fflush是用于您想要刷新的其他流的方法,例如stdout。
为了澄清,流必须用于输出。标准上说:
如果流指向未输入最新操作的输出流或更新流,fflush函数将导致将该流的任何未写入数据传递到要写入文件的主机环境;否则,行为将未定义。
稍后,标准将此显式地包含为“未指定的行为”:
fflush函数的流指向输入流或更新流,其中最近的操作是输入。
发布于 2014-02-24 19:41:44
你误会了。
在输入流上调用fflush()具有未定义的行为,就C标准而言,某些系统和/或辅助标准(如POSIX )可能定义它的行为,但在打算可移植的代码中依赖这种行为不是一个好主意。
在输出流上调用fflush() (例如,fflush(stdout) )是完全安全的,并且定义得很好。它会导致将任何挂起的输出传递到操作系统(这并不保证它将被传递到物理输出设备)。
在某些情况下,在输入流上调用fflush时,应该实际读取和丢弃输入字符,直到看到换行符'\n'或EOF为止。或者,通常更好的做法是使用fgets或类似的东西一次读取整行,然后解析输入。
https://stackoverflow.com/questions/21997286
复制相似问题