2017-08-28 37 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”问题的接受答案。