2
我特別尋找C11標準(ISO/IEC 9899:2011)或POSIX頁面中的單詞。我檢查了POSIX manual for fwrite,但它沒有提及未定義的行爲。然而,manual for fclose不說,當stream爲空時,fwrite和fread等操作是否有未定義的行爲?
,來電後FCLOSE(),不確定的行爲的任何使用流導致的。
但我仍然看不到NULL
流是否會導致UB。
我特別尋找C11標準(ISO/IEC 9899:2011)或POSIX頁面中的單詞。我檢查了POSIX manual for fwrite,但它沒有提及未定義的行爲。然而,manual for fclose不說,當stream爲空時,fwrite和fread等操作是否有未定義的行爲?
,來電後FCLOSE(),不確定的行爲的任何使用流導致的。
但我仍然看不到NULL
流是否會導致UB。
兩個fread()
和fwrite()
預計流參數是由成功調用返回fopen()
,fdopen()
或freopen()
的值。由於這些函數錯誤返回NULL,流參數不能爲NULL。
由於手冊頁並沒有說會發生什麼,當流是不是一個成功的調用返回到fopen()
值等,這意味着手冊頁並沒有說會發生什麼,當流是沒有返回值,通過成功呼叫fopen()
等,或換句話說,行爲沒有被定義。
另請參閱本主板上「Why glibc's fclose(NULL) cause segmentation fault instead of returning error」問題的接受答案。
7.1.4p1適用,除非被覆蓋,並且不會覆蓋'fread'或'fwrite' –
行爲可能是未定義的,即使它沒有被明確提及。口頭上使用術語「未定義」,如果沒有定義,則不定義。 –