LINUX.ORG.RU

ANSI С.трабла с учебным примером.


0

0

Стандартный пример из ANSI C:

#include <stdio.h>
#define MAXLINE 10


int getline_check (char line[], int maxline);
void copy (char to[], char from[]);


main() {
	int len; /* current length */
	int max; /*max checked length*/
	char line[MAXLINE]; /*current string*/
	char longest[MAXLINE]; /*longest string*/

	max = 0;
	while ((len = getline_nocheck ()) > 0)
		if (len > max) {
			max = len;
			copy (longest, line);
		}
	if (max > 0) /* non-zero string ? */
		printf("%s\n", longest);
	return 0;
}


/* getline: reads string to s, returns length */
int getline_check(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;
}

/*copy: copy from "from" to "to"; to is big*/
void copy(char to[], char from[]) {
	int i;

	i = 0;
	while ((to[i] = from[i]) != '\0')
		++i;
}

task:
  модифицировать main() так, чтобы ограничений на размер строки не было.
не пойму:
  1. если только в main(), то остается же ещё getline с проверкой...
  2. а в main() при определении символьных массивов-уже ограничение.
     т.е. можно как-то определить массив неопределенного размера,
     чтобы вбить туда впоследствии самую длинную строку ?
что-то не дойдет никак, что хотели сказать авторы.
вопрос:
  В каком направлении думать ? )))

Можно выделить память для строки mallocом в куче, по мере необходимости выделять больше.

welkam ★★
()
Ответ на: комментарий от welkam

thx за наводку,попробую.
жаль, что на этом этапе, понятия malloc - ещё нет ))

meshkcah
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.