源自《The C Programming Language》P29
从终端读入一组文本行,并将最长的文本行打印出来
代码:
分析:
1, 需要两个数据结构:line,longest保存当前输入行,长度最长的行,line longest均为指向大小为MAXLINE的char数组。
2, getline函数:将一行读入到line中,返回其长度。
(a):for循环的判断条件,i < lim-1 && (c = getchar()) != EOF && c != '/n',当满足这些条件时,将从终端中的读入
字符放进s数组(即实参line数组)中。
(b):Q:为什么不是i <= lim-1呢? A:字符串的结尾符必须是'/0',如果设置为i <= lim-1,在本例中则为i <= 999,
如果一个字符串刚好是1000个字符,当读入第1000个字符时,并且该字符不是'/n',也没到达文件尾,则符合for
循环的判断条件,执行s[i] = c;,此时字符数组s(相对应实参line)放满了,当跳出循环执行s[i] = '/0';时,因为
空间不够,产生了越界错误。
(c):当读入'/n'时,意味着从输入中读入一行字符这个操作即将完成,此时需要做的就是将该'/n'和'/0'放入s[i]中。
(d):当读入的字符为EOF,意味到达文件尾,输入中已经没有字符可供读入了,故再将/0'读入到s中,以形成一个字符串,
这个字符串被存储在字符数组s中。
3, copy函数中while判断条件:(to[i] = from[i]) != '/0' 精干简洁。