我知道 fgetc()
将从用作参数的 FILE
指针指向的文件中一次读取一个字符。fgets()
将读取整个字符串到参数列表中指定的大小,但是当行尾发生时 fgetc()
返回 EOF 而 fgets()
返回 NULL
。那么为什么要记住两件令人困惑的事情?
最佳答案
一个返回 EOF
而另一个返回 NULL
的原因是两个函数的返回类型不同:一个返回 int
,而另一个返回 char*
。
当输入结束时,两个函数都需要返回一个“特殊”值。 “特殊”是指不能合法出现在输入中的值。对于指针,大多数情况下的特殊值是 NULL
,这就是 fgets
返回的值。但是,您不能使用 NULL
来标记来自 fgetc
的输入的结尾,因为零字符代码可以合法地出现在输入中。这就是为什么EOF
在返回单个字符的I/O函数中用作“特殊值”的原因。