// 获取最长文本行 #include <stdio.h> #define MAXLINE 10 // maximum input line length int getline(char line[], int maxline); void copy(char to[], char from[]); // Print the largest input line int main() { int len; // current line length int max; // maximum length seen so far char line[MAXLINE]; // current input line char longest[MAXLINE]; // longest line saved here // 下面代码有问题,如果输入行长度超出MAXLINE,则只得到了第一次遇到 // 长度大于等于MAXLINE的行为最长行,且输出长度只是MAXLINE max = 0; while ((len = getline(line, MAXLINE)) > 0) { // 当前遇到的最长字符行 if (len > max) { max = len; copy(longest, line); } } // 存在最长行 if (max > 0) { printf("The longest line : %s/n", longest); } return 0; } // getline: read a line into s (include '/n' and '/0'), return length int getline(char s[], int lim) { int c, i; // 调用的时候实参是设定的最大长度,所以下面操作不会出现越界。 // 此处是lim-1是因为还要存放最后一个'/0',如果到了行末,还要将换行符 // 写入, 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; } // copy: copy 'from' into 'to'; assume to is big enough void copy(char to[], char from[]) { int i; for (i = 0; (to[i] = from[i]) != '/0'; ++i) ; }