이 문제의 아래 코드가 자꾸 런타임 에러가 뜨는데 어디가 잘못된건가요 ㅠㅠ

powerzt Reply 9 years 32 weeks ago
#include <stdio.h> #define MAXLINE 1000 int main() { char c; char line[MAXLINE]; int i,k,max=0; int j=0; c=getchar(); for(i=0; (i<MAXLINE) && (c!=EOF); i++ ){ line[i]=c; c=getchar(); } while(j<i){ if(((line[j]=='/') && (line[j+1]=='*'))||(line[j]=='"')) { if ((line[j] == '/') && (line[j + 1] == '*')) for (k = j; ((line[k] == '*') && (line[k + 1] == '/')) == 0; k++) { line[k] = NULL; line[k + 1] = NULL; max = k + 2; } else if (line[j] == '"') for (k = j; line[k] != '"'; k++) max = k + 1; j = max; } else j++; } printf("%s", line); return 0; }
pichulia Reply 9 years 32 weeks ago
일단 NULL은 "이 부분은 무시하고 다음 문자를 출력한다" 뭐 이런 느낌의 예약어가 아니라.. "이 글자를 만나면 문자열 출력을 종료한다! 어서!" 입니다. 그러니까 ab/**/cd 같은게 들어오면 지금은 ab(NULL)(NULL)cd가 되기 때문에 출력하면 ab만 나오겠죠. 이제 실제로 Runtime error가 발생하는 부분을 보면 for (k = j; ((line[k] == '*') && (line[k + 1] == '/')) == 0; k++) { line[k + 1] = NULL; 이부분 때문입니다. /*a*/asdfasdf 같은걸 입력으로 넣어보시면 아실겁니다. 왜 저기서 무한루프를 도는가에 대해서...