Naw*_*waz 18
签名fclose是这样的:
int fclose ( FILE * stream );
Run Code Online (Sandbox Code Playgroud)
这意味着,fclose期望一个指向FILE对象的指针.因此,如果你传递0,而不是指针,0将被理解为NULL指针1.如果它的NULL指针,你怎么期望它关闭stdin?它不会关闭.使用fclose(stdin),因为stdin它本身是一个指向FILE对象的指针.
我认为你混淆stdin了文件描述符,它是整数类型,通常表示为fd.它的真正fd的输入流0.所以,如果你想使用fd(而不是FILE*),那么你就使用close从<unistd.h>.
#include <unistd.h>
int close(int fildes);
Run Code Online (Sandbox Code Playgroud)
也就是说,close(0)会关闭stdin.
1:看起来有趣的是,如果你已经1意图关闭传递给fclose stdout,你的代码甚至不会编译,你会立即在编译时看到代码的问题.现在问题是,为什么不编译?因为不像0,1不会隐式转换为指针类型.编译器会生成类似的消息"error: invalid conversion from ‘int’ to ‘FILE*’.请在ideone处查看错误和行号.
我认为它会把它当作fclose(NULL); 哪个应该是未定义的并且可能会崩溃.