2017-08-28 90 views
2

我特別尋找C11標準(ISO/IEC 9899:2011)或POSIX頁面中的單詞。我檢查了POSIX manual for fwrite,但它沒有提及未定義的行爲。然而,manual for fclose不說,當stream爲空時,fwrite和fread等操作是否有未定義的行爲?

,來電後FCLOSE(),不確定的行爲的任何使用流導致的。

但我仍然看不到NULL流是否會導致UB。

+1

7.1.4p1適用,除非被覆蓋,並且不會覆蓋'fread'或'fwrite' –

+1

行爲可能是未定義的,即使它沒有被明確提及。口頭上使用術語「未定義」,如果沒有定義,則不定義。 –

回答

2

兩個fread()fwrite()預計參數是由成功調用返回fopen()fdopen()freopen()的值。由於這些函數錯誤返回NULL,參數不能爲NULL。

由於手冊頁並沒有說會發生什麼,當是不是一個成功的調用返回到fopen()值等,這意味着手冊頁並沒有說會發生什麼,當是沒有返回值,通過成功呼叫fopen()等,或換句話說,行爲沒有被定義。

另請參閱本主板上「Why glibc's fclose(NULL) cause segmentation fault instead of returning error」問題的接受答案。