【发布时间】:2021-03-09 09:48:57
【问题描述】:
#include <stdio.h>
void main( )
{
FILE* fp = stdin;
printf("Input string: ");
printf("getchar( ) - %c\n", getchar());
printf("[%d] %s", fp->_cnt, fp->_base);
printf("READ: %d\n", fp-> _ptr - fp->_base);
printf("\\n\ngetchar( ) - %c\n", getchar());
printf("[%d] %s", fp->_cnt, fp->_base);
printf("READ: %d\n", fp->_ptr - fp->_base);
fflush(fp);
printf("\n\nAfter flushing\n[%d] %s", fp->_cnt, fp->_base);
printf("READ: %d\n", fp->_ptr - fp->_base);
}
- 我的 C 书籍中有这段代码,但
FILE结构中没有_cnt成员。 - 我怎样才能得到正确的结果?
【问题讨论】:
-
正确的结果是什么?
-
那将是 bad C 代码(隐含地,是一本 bad 书)。
FILE*类型指向 opaque structure,它的成员永远不应该被显式使用。 -
这本书是什么,为什么它使用
FILE结构的内部部分? -
@AdrianMole:如果
FILE结构的成员永远不应该被显式使用,那么任何人如何实现标准的I/O 功能?或者教其他人如何实现它们? -
@Eric 好的,它们不应该被实现本身之外的代码使用。相反,应该使用标准例程来检索有关打开的 FILE 的信息。您无疑会知道,不同的实现可以以不同的方式实现
FILE结构,并为成员使用不同的名称。