【发布时间】:2017-03-17 03:21:16
【问题描述】:
给定以下 C 代码:
int eofCount = 0;
while (true) {
int c = fgetc(stdin);
if (c == EOF) eofCount++;
}
eofCount 会变得大于 1 吗?
我在 C 文档中找不到任何描述在达到 EOF 后 fgetc 会发生什么的任何内容。我知道我可以自己做这个簿记,但如果 stdlib 能为我做这件事,那就太好了。
我不是在寻找代码 sn-ps,因为我已经用 glibc 尝试过这个,实际上 eofCount 是在 EOF 之后递增的。我想要确认这是已定义行为的 stdlib 源代码参考或规范。依赖未定义的行为可能会导致问题。
【问题讨论】:
-
它可能确实如此,但假设它可能并不安全。你能多谈谈你真正想做的事情吗?
-
一些基本的流处理。我有自己的库,它接受文件指针并做一些基本的事情,我想知道这个库的调用者是否需要注意不要用 EOF 文件调用它。我同意这看起来像是未定义的行为,但我想知道是否有人知道得更好。
-
您似乎没有很好地搜索或阅读。标准和 POSIX 手册页对行为非常清楚。
-
Glibc bug 1190 该错误是在 2005 年提交的,尽管其行为比那要早得多。不是一个重复的问题,而是高度相关的答案:stackoverflow.com/questions/19889296/… 我对另一个类似问题的看法:stackoverflow.com/questions/32322792/…
-
@user902384:您认为这里涉及哪些不同的标准?只有一个 C 标准。这对行为非常清楚。你读过吗?