【发布时间】:2009-11-02 09:27:38
【问题描述】:
即使已经到达 EOF,fgets() 是否总是以 \0 终止字符缓冲区?看起来确实如此(在 ANSI K&R 书中介绍的实现中确实如此),但我想我会要求确定。
我猜这个问题适用于其他类似的函数,例如gets()。
编辑:我知道 \0 在“正常”情况下附加,我的问题针对 EOF 或错误条件。例如:
FILE *fp;
char b[128];
/* ... */
if (feof(fp)) {
/* is \0 appended after EACH of these calls? */
fgets(b, 128, fp);
fgets(b, 128, fp);
fgets(b, 128, fp);
}
【问题讨论】:
-
总是检查
fgets()的返回值:if (fgets(...) == NULL) /* indeterminate array */; -
您可能是对的,但是,我看到还有其他答案指出始终附加
\0,即使fgets()返回NULL。