런타임에러는 주로 배열의 크기보다 더 큰 인덱스를 참조하는 경우 발생합니다. 예를 들어 int a[10]; 배열을 이렇게 선언해놓고 a[1999] = 20; printf("%d", a[-2]); 이렇게 사용할때요....
지금같은 코드는 collect배열의 크기가 문제입니다. 문제 조건에 "라인별 글자수"가 1000자 이하인거지, 전체 입력되는 문자의 수가 1000개 이하라고 하지 않았습니다.
입력으로 몇줄이 들어올줄 모르는데 정답이 되는 애들을 전부다 배열에 집어넣고 EOF가 들어왔을 때 한번에 출력하는 방식은 별로 추천하고싶지 않습니다. 줄마다 따로 연산을 취하는걸 추천하고싶네요.
여담으로 현재의 코드...c로 EOF가 들어올경우 틀림없이 문제가 발생합니다. 왜 그런지는
abc
d(그리고 EOF)
이런 식으로 입력이 들어온 경우 arr배열에 값이 어떻게 들어갈지 체크해보시면 알 수 있습니다.