我是编程新手,从 Objective-C 开始,但决定在进一步发展之前回到基础。我在 C 语言上花了一些时间,并且在指针混乱中苦苦挣扎。我的问题是关于 K&R 说 fgets 是如何实现的(p165,第 2 版)。下面的代码直接来自文本,并附有我的一些评论。
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 和谷歌,但不能完全弄清楚。谢谢!