我是编程新手,从Objective-C入手,但决定在进一步学习之前回归基础。我花时间学习C语言,并且正在努力理解指针。我的问题是关于K&R如何实现fgets(第二版p165)。下面的代码直接来自文本,并带有我的几点评论。
char* fgets(char* s, int n, FILE *iop)
{
register int c;
register char* cs;
cs = s;
while(--n > 0 && (c = getc(iop)) != EOF)
{
// put the input char into the current pointer position, then increment it
// if a newline entered, break
if((*cs++ = c) == '\n')
break;
}
*cs = '\0';
return (c == EOF && cs == s) ? NULL : s;
}
1) 我们将一个 char* s 传递给 fgets 函数,将用户输入存储在其位置。为什么需要声明本地 char* cs - 然后将其初始化为 s?为什么不能在 if 语句内直接操作/添加到 s 中?既然 cs 初始化为指向 s,那么将字符添加到 cs 中不就是完全相同的事情吗?
2) 与上述内容有关...当函数返回时,会进行一个测试以查看 cs == s。为什么有必要这样做?
我认为我可能缺少非常基础的东西 - 我确实检查了 SO 和 Google,但无法完全弄清楚。谢谢!