jwarhw98   3년 전

비주얼스튜디오에서 혼자 스스로 많은 예제를 넣어봤는데 잘 돌아가는 것처럼 보입니다.

그런데 제출하면 계속 런타임 에러가 뜨네요.

어느 부분에서 런타임 에러가 뜨는 것일까요?

감사합니다.

umc1997   3년 전

23번째 줄에서 c[j+2]를 호출하는거에서 문제가 발생합니다.

j는 최대 문자열길이 - 2 인데

j+2는 최대 문자열길이입니다.


그리고 strlen(c)를 너무 많이 사용하는 것은 안 좋습니다.

strlen(c)를 한번 호출할때마다 시간복잡도가 문자열길이만큼 사용됩니다.

때문에 for문 조건에 k<strlen(c) 이런식으로 사용하는거는 문자열길이의 제곱의 시간이 소비됩니다.

strlen(c)을 변수에 할당하고 문자열길이가 필요할때마다 그 변수를 사용하는 것을 추천드립니다. 

jwarhw98   3년 전

조언 감사합니다! 그런데 말씀해주신 c[j+2]를 호출하는 부분에서 for문의 조건에서 j < strlen(c) - 2로 되어있기 때문에 j는 최대 strlen(c)-3이고 그러면 j+2는 그 때 strlen(c)-1이라 괜찮지 않나요?

umc1997   3년 전

제가 위에 적어드린 답변은 틀렸습니다... 제가 잘못생각했네요.. ㅠㅠ 다른 이유때문에 런타임에러입니다.

c언어에서는 scanf할때 문자열의 마지막을 뜻하는 '\0'도 같이 배열에 들어옵니다. 때문에 원칙적으로는 c[배열크기-1] ='\0'입니다. strlen함수의 원리도 이 '\0'의 위치를 계산해서 
문자열 길이를 반환하는 건데요.

길이가 100짜리 문자열이 들어오면 '\0'가 배열에 들어가지 못해서 strlen함수가 문자열의 길이를 리턴못해서 런타임에러가 나옵니다.

문자열의 최대크기가 100이기때문에 배열을 넉넉하게 110정도로 할당하면 아마 에러가 안날거에요..

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