爲什麼fflush()
不被認爲是安全的?我被告知它顯示未定義的行爲?如果是這樣,fflush()的替代選擇是什麼?爲什麼fflush()不被認爲是安全的?
3
A
回答
6
你可能被告知fflush(stdin)
是未定義的,這是正確的。但是fflush
是您想要刷新的其他流的路線,例如stdout
。
爲了澄清,該流必須用於輸出。該標準說:
如果流點到輸出流或其中 最近的操作不是輸入的更新流,fflush函數使該流的任何 未寫入的數據被傳遞到主機環境將 寫入文件;否則,行爲是不確定的。
後來的標準包括這種明確爲「未指定的行爲」:
流爲fflush函數指向一個輸入流或到 更新流其中最近一次操作是輸入
+0
驅動器downvoter:我很擔心你。現在來評論,我們可能仍然能夠幫助你。 – cnicutar
4
您誤會了。
上的輸入流調用fflush()
已至於C標準而言有些系統和/或二級標準,如POSIX可以定義其行爲未定義的行爲,但它不是依靠在代碼是個好主意這是爲了便攜。
在輸出流上調用fflush()
,例如fflush(stdout)
,是完全安全和明確的。它會導致任何掛起的輸出被傳送到操作系統(不保證它將被傳送到物理輸出設備)。
在某些情況下,在輸入流上調用fflush
時,實際上應該讀取並放棄輸入字符,例如,直到看到換行符'\n'
或EOF
。或者,通常更好的方法是使用fgets
或類似的方法一次讀取整行,然後解析輸入。
相關問題
- 1. 爲什麼我的javascript不被認爲是安全的?
- 2. 爲什麼$ _REQUEST變量被認爲是不安全的?
- 3. 爲什麼這被認爲是Sharepoint中的「不安全更新」?
- 4. 爲什麼strtok()被認爲是不安全的?
- 5. 爲什麼SSL被認爲是安全的?
- 6. 爲什麼「strcat」被視爲「不安全」?
- 7. 爲什麼有些隨機()函數被認爲「不安全?」
- 8. 爲什麼我的安全iframe被報告爲不安全?
- 9. 爲什麼<style>塊被認爲是不安全的標記?
- 10. 爲什麼這些5(6?)字符被認爲是「不安全的」HTML字符?
- 11. 爲什麼認爲加密更安全?
- 12. 如何通過PayPal API憑證安全地使用PHP(以及爲什麼這不被認爲是安全的)
- 13. 爲什麼不會fflush(stdin)的工作?
- 14. 爲什麼這些逆變參數類型被認爲是安全的?
- 15. 爲什麼靜態字段通常被認爲是線程安全的?
- 16. 爲什麼寫入JS中的剪貼板被認爲是安全漏洞?
- 17. 爲什麼肥皂是安全的?爲什麼不使用HTTPS?
- 18. Mac OSX? Linux呢? X?侏儒? KDE?爲什麼osx被認爲是linux,爲什麼它不被認爲是linux?
- 19. 爲什麼全局變量被認爲是「禁忌」語法?
- 20. 爲什麼Redis被認爲是CP?
- 21. 爲什麼'\\'被認爲是int?
- 22. 這爲什麼不安全?
- 23. 爲什麼Generics.Collections.TObjectList.List不安全?
- 24. __caller__爲什麼不安全?
- 25. 將幾個oauth帳戶鏈接到單個用戶:什麼被認爲是安全的做法,什麼不是?
- 26. 爲什麼maxConcurrentSessions默認爲這樣一個低值?什麼是安全價值?
- 27. 爲什麼decimal.Decimal對象不被認爲是合理的?
- 28. 爲什麼OCaml的線程被認爲是「不夠」?
- 29. 爲什麼$在cakePHP中被認爲是不好的做法?
- 30. 爲什麼before_save被認爲是不好的?
http://stackoverflow.com/questions/2979209/using-fflushstdin – user2485710