연습 1.19

sughoan Reply 9 years 32 weeks ago
왜 withcs에서 런타임에러가 뜨는지 모르겠습니다. #include <stdio.h> #define MAXLINE 1000 int getline(char line[], int maxline); int main() { int len; int i=0; char line[MAXLINE]; char print[MAXLINE]; while((len = getline(line, MAXLINE)) >= 0) { while(len >= 0) { if(line[len] == EOF) { len--; } else { print[i] = line[len]; i++; len--; } } print[i] = '\n'; i++; } print[i]='\0'; if(i > 0) { printf("%s", print); } return 0; } int getline(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') { i++; } s[i] = '\0'; return i-2; }
booksky Reply 9 years 31 weeks ago
안녕하세요. 조교 이은헌입니다. 런타임 에러가 발생한 원인은 line 배열의 크기가 작기 때문입니다. 코드를 보시면 line에 입력을 받고 뒤집어준 다음 print배열에 line값을 다시 넣고 마지막에 한꺼번에 출력을 해주게 됩니다. 입력값이 maxline보다 길어질 경우 print 배열의 범위를 넘어가버리기 때문에 문제가 발생하는 것입니다.
blacksianj Reply 9 years 31 weeks ago
학생, 아까 도와준 조교인데요, 학생이 제출한 가장 최근 코드에서, getline 함수 안에 EOF일 경우에 도 i++을 하도록 코드를 추가를 해주면 실행이 되네요. 학생이 쓰던 IDE에서 문자열 다음에 바로 EOF문을 입력하면 결과가 안나오는 것은 IDE상에서 처리하는 방법의 문제이지 실제 코드가 잘못된 것은 아닌것 같네요