我新的编程,启动了与Objective-C的,但已经决定回到基础进一步进展之前。我花了一些时间在C上,并且正在通过指针混淆挣扎。我的问题是关于如何实现fgets的K &(p165,第二版)。下面的代码是直接从我的几条评论的文本。与fgets实现(K&R)
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 ==秒。为什么这是必要的?
我想我可能会丢失一些非常基本的 - 我这样做了检查和谷歌,但不能完全弄清楚。谢谢!
“从Objective-C开始,但决定在进一步发展之前回到基础知识” - 非常好,**每个初学者都应该这样做。** – 2013-05-06 11:31:57
我刚开始觉得我正在步步为营在Obj-C中。自从回到C后,我再次感受到了一个完整的klutz,但是尽管我反复敲打了分段故障和奇怪的程序行为,但这绝对值得。 – drjimmie1976 2013-05-06 18:13:39
这是最值得的。掌握C对于理解Objective-C是不可避免的。 – 2013-05-06 18:28:03