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

10-09 09:43