标准输入是否是一个指针,正如我在 fgets() 中看到的那样。
我使用了“0”,因为我们错误地用于标准输入的读取或写入,并且在 fgets 期间出现了段错误。
是STDIN宏和0是一样的。
是stdin是一个文件指针。请解释一下
标准输入是FILE *
来自stdio.h
STDIN_FILENO == fileno(stdin)
STDIN_FILENO
is in unistd.h
and 用于类似的函数write
,而作为 File * 的 stdin 用于类似的 stdio 函数printf
stdin
是一个扩展为类型表达式的宏FILE *
(所以,是的,它是一个指针)。它的值是未指定的,但它需要指向一个具体的对象,所以它肯定是非NULL的。
0
是一个整数常量,在指针上下文中使用时会转换为 NULL 指针。随之而来的是stdin != 0
。
STDIN
不是由标准 C 库定义的。
你可能听说过,对应的OS级文件描述符stdin
的值为0,这是真的,但是文件描述符和FILE
对象不是一回事,不能互换使用。(如果你在一个 Unixy 系统上,找个时间读一读/usr/include/stdio.h
。它“只是”更多的 C。通常那里有一个FILE
对象的具体定义,作为一个相当复杂的struct
,即使这不是标准所要求的。)