C 是stdin,0,stdin是不同的东西
Is stdin是一个指针,正如我在fgets()中看到的那样 我使用了“0”,因为我们错误地将其用于stdin的读取或写入,并且在fgets期间出现了segfault Is STDIN宏和0是相同的C 是stdin,0,stdin是不同的东西,c,unix,C,Unix,Is stdin是一个指针,正如我在fgets()中看到的那样 我使用了“0”,因为我们错误地将其用于stdin的读取或写入,并且在fgets期间出现了segfault Is STDIN宏和0是相同的 Is stdin是一个文件指针。请对此进行解释stdin是stdio.h STDIN_FILENO == fileno(stdin) STDIN\u FILENO位于unistd.h中,用于write等函数,而STDIN作为文件*用于printf等stdio函数。STDIN是一个宏,可扩展为Fi
Is stdin是一个文件指针。请对此进行解释stdin是
stdio.h
STDIN_FILENO == fileno(stdin)
STDIN\u FILENO
位于unistd.h
中,用于write
等函数,而STDIN作为文件*用于printf
等stdio函数。STDIN
是一个宏,可扩展为File*
类型的表达式(因此,是的,它是一个指针)。它的值未指定,但需要指向具体对象,因此它肯定是非空的。0
是一个整数常量,在指针上下文中使用时会转换为空指针。因此,stdin!=0
STDIN
不是由标准C库定义的
您可能听说过与
stdin
对应的操作系统级文件描述符的值为0,这是真的,但是文件描述符和file
对象不是一回事,它们不能互换使用。(如果您使用的是Unixy系统,请在某个时候阅读/usr/include/stdio.h
。它“只是”更多的C。通常那里有一个文件
对象的具体定义,作为一个相当复杂的结构
,即使标准不要求这样做。)man 3 stdin:外部文件*stdin代码>您还收到一个编译器警告,您完全忽略了它。别那么做,谢谢你,蒂姆。我会翻阅手册,这是一个很好的解释,扎克。谢谢你帮助我理解差异。谢谢Max帮助我理解。