kwondae2   3년 전

제목 그대로 런타임 오류가 뜹니다.

원인은 공백을 입력했을 경우 입니다.

문제는 이걸 어떻게 처리해야 할지 잘 모르겠습니다. 스트링이 공백일 경우에 count_words 값을 -1로 할당하고 싶은데 공백인 조건을 캐치를 못하겠네요.

다른 질문글들을 보니 While(cin>>input[i]) 처럼 조건을 주는데 잘 이해가 안됩니다.

아무래도 EOF에 대한 이해가 부족한거 같은데 설명 부탁 드리겠습니다. 혹은 제가 잘못 방향을 잡고 있다면 조언 부탁드립니다.

감사합니다 !

dldyddlwl   3년 전

아닙니다. 잘하셨습니다!

자, 런타임에러의 원인을 알아봅시다. 공백 하나만 들어올 때, 런타임에러가 일어나는 이유는 아래의 erase문에 있습니다.

공백 하나만 들어온 경우 input = ' ' 입니다. 즉, input의 size는 1입니다. 그런데, 이것을 지우면, input의 size는 0이 되면서 빈 스트링이 되겠죠?

그런데, 그 아래 if문에서 input.size()-1 = 0 - 1 = -1,  -1번째 인덱스에 접근하게 됩니다. 애초에, 비어있는 스트링이 되었으므로, at으로 접근하는 것은 위험합니다.

그렇다면, 이 경우만 따로 처리하면 어떨까요?  만약, 처음 erase를 하고나서, 비어있다면( = 사이즈가 0이라면! ) 공백인 경우라는 것을 알아낼 수 있겠죠!

나머지 경우는 이미 잘 처리되었으니, 이 부분만 고려해주세요

kwondae2   3년 전

 답글이 늦었습니다. 죄송합니다.

인덱스 부분을 체크 했다고 생각했는데 erase하고나서 바로 아래에서 인덱스 오류를 간과했네요 ㅠㅠ

항상 디버깅 부분이 어려운 것 같습니다. 무언가 잘못된 부분을 캐치한다는 것이 쉽지 않군요.

 친절한 설명 감사드립니다 ^^

댓글을 작성하려면 로그인해야 합니다.