#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;
}
일단 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 같은걸 입력으로 넣어보시면 아실겁니다. 왜 저기서 무한루프를 도는가에 대해서...