c - 函数读取c编程语言中的一行

标签 c

在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算作一个字符?

最佳答案

  1. 需要为空终止符 \0 保留空间,它在循环结束时附加到字符串。 (这就是字符串在 C 中的建模方式)。

  2. EOF 是一个特殊值,表示文件结束。请注意 getchar() 如何返回 int:这主要是为了让 EOF 的值不必在 char 的范围内.

关于c - 函数读取c编程语言中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39077070/

相关文章:

c - C程序中线程内的多线程

c - Visual Studio 2010 中的 Langinfo.h

c - 为什么我的程序不能读取带有 gets 函数的字符串并且它通过它并只给我早期 scanfs 的最终结果

C:如何计算结构体中的项目数?

c++ - 点运算符成本 c/c++

c - 在 C 中是一个查找表,替代 bash||php 中的变量

c - 费米架构上的 int2 与 int4 负载

c - 我如何确定C中整数的位数?

c - 重复,但仍然使用标准输出

c - 尝试根据 C 中的增量分配 char[] 的值