-3

标准输入是否是一个指针,正如我在 fgets() 中看到的那样。

我使用了“0”,因为我们错误地用于标准输入的读取或写入,并且在 fgets 期间出现了段错误。

是STDIN宏和0是一样的。

是stdin是一个文件指针。请解释一下

4

2 回答 2

3

标准输入是FILE *来自stdio.h

STDIN_FILENO == fileno(stdin)

STDIN_FILENOis in unistd.hand 用于类似的函数write,而作为 File * 的 stdin 用于类似的 stdio 函数printf

于 2013-09-26T01:31:40.093 回答
1

stdin是一个扩展为类型表达式的宏FILE *(所以,是的,它是一个指针)。它的值是未指定的,但它需要指向一个具体的对象,所以它肯定是非NULL的。
0是一个整数常量,在指针上下文中使用时会转换为 NULL 指针。随之而来的是stdin != 0
STDIN不是由标准 C 库定义的。

你可能听说过,对应的OS级文件描述符stdin的值为0,这是真的,但是文件描述符和FILE对象不是一回事,不能互换使用。(如果你在一个 Unixy 系统上,找个时间读一读/usr/include/stdio.h。它“只是”更多的 C。通常那里有一个FILE对象的具体定义,作为一个相当复杂的struct,即使这不是标准所要求的。)

于 2013-09-26T01:39:47.893 回答