Я предполагаю, что вы имеете в виду упражнение 1.16 на стр. 30. Полное утверждение:
Упражнение 1-16. Пересмотрите основную процедуру самой длинной строкипоэтому программа будет правильно печатать длину произвольно длинных строк ввода и как можно больше текста.
Невозможно вернуть всю строку, если ее длина произвольна, потому что вы могли бы иметьчтобы сохранить его, и это потребует динамического выделения памяти.Однако вы можете немного изменить основную подпрограмму, чтобы она правильно вычисляла длину строки и выводила «как можно больше» текста, т.е. до фиксированной длины.
Вот один из возможных ответов:
#define MAXLINE 1000 /* maximum input line size */
main() {
int buf_len; /* current buffer length (<= MAXLINE) */
int len = 0; /* current full line length */
int max = 0; /* maximum length seen so far */
char buffer[MAXLINE]; /* current input line */
char line[MAXLINE]; /* prefix of longest-line candidate */
char longest[MAXLINE]; /* longest line saved here */
while ((buf_len = getline(buffer, MAXLINE)) > 0) {
if (len == 0) /* this is the first chunk of the string */
copy(line, buffer);
len += buf_len;
if (buf_len < MAXLINE || buffer[MAXLINE-2] == '\n') {
/* the string was terminated */
if (len > max) {
max = len;
copy(longest, line);
}
/* this line was fully processed */
/* now reset len to 0 and process the next string */
len = 0;
}
}
if (max > 0)
printf("%s", longest);
return 0;
}