在C书(第二版第29页)上,我读到了以下内容:
/* getline: read a line into s, return length */
int getline(char s[], int lim)
{
int c, i;
for(i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
s[i] = c;
if(c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
}
我的问题是:为什么在条件测试中它是
i<lim-1
而不是i<lim
?(PS:LIM是一条直线的最大长度)问题2:在C上,
EOF
是否算作字符? 最佳答案
需要为在循环结束时附加到字符串的空终止符\0
预留空间。(这就是C中字符串的建模方式)。
EOF是一个表示文件结束的特殊值。注意getchar()
如何返回int
:这主要是因为EOF的值不必在char
的范围内。
关于c - 读取C语言编程的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39077070/