在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/