parkmoon12   3년 전

문자열을 입력 받고 그룹 단어가 아닌 것을 count해주고 n에서 빼는 형식으로 작성해봤습니다.

질문에서 많은 반례들을 넣어봤는데 다 돌아가서 질문드립니다. ㅜㅜㅜ

뭐가 잘못된 걸까요??

dldyddlwl   3년 전

우선, 

아래 코드에서 str은 scanf에 의해 잘 초기화된 것처럼 보이지만, str의 실제 문자열이 담긴 부분을 제외하고는 그렇다고 할 수가 없습니다.
다시 말하면, 만약에 처음에 길이가 100인 단어를 받고, 다음 길이가 30인 단어를 받으면 뒷부분에 길이 100 단어의 쓰레기값이 남아있게 됩니다.


문제는 for 루프의 조건문을 str[k] 즉, '\0' 를 사용하신다는 것입니다. 그렇다면, k는 j+2이므로, str[k] = str[j+2] 가 길이를 넘어서는 경우가 생길 수 있습니다.

글쓴이님의 의도는 넘어서더라도, str[k] = 0 일 것이므로, 안전하다고 생각하셨을 것 같습니다.

의도한 str[k] = 0 이지만, 실제로는 str[k] = 쓰레기값, ( 따라서, 별도의 초기화 과정이 있어야만 합니다! , 남은 쓰레기가 없도록 해야합니다.)

이것들만 해결하면 잘 되더군요!

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