当stream为null时,fwrite和fread等操作是否有未定义的行为?

时间:2017-08-28 17:43:43

标签: posix system-calls c11

我特意在C11标准(ISO / IEC 9899:2011)或POSIX页面中寻找这个词。我检查了POSIX manual for fwrite,但它根本没有提到未定义的行为。但是,manual for fclose确实说

  

在调用fclose()之后,对流的任何使用都会导致未定义的行为。

但我仍然不知道NULL流是否会导致UB。

1 个答案:

答案 0 :(得分:2)

fread()fwrite()都希望 stream 参数成为成功调用fopen()fdopen()或{{返回的值1}}。由于这些函数在出错时返回NULL,因此 stream 参数不能为NULL。

由于手册页未说明当 stream 不是成功调用freopen()等返回的值时会发生什么情况,这意味着手册页没有说明当发生时会发生什么 stream 不是成功调用fopen()等返回的值,换句话说,行为未定义。

另见本委员会对“Why glibc's fclose(NULL) cause segmentation fault instead of returning error”问题的接受答案。