leekh100000   9년 전

20줄~24줄의 for문을 디버깅하는데 위의 if와 else if는 무조건 지나치고 else만 찾아 들어가더라고요..

계속 해봐도 같은 문제가 발생하는데 왜 그런건지 잘 모르겠습니다.

zzapCoder   9년 전

strlen() 함수의 반환값은 size_t 이고,

(대부분의 경우) size_t 는 unsigned int 입니다. 그리고 i는 int형 변수이죠?


unsigned int와 int를 섞어서 계산하게 될 경우에 형변환은 더 큰쪽으로 자동 형변환이 되는데, 이때 더 큰쪽은 unsigned int가 됩니다.

unsigned int는 음수가 없으므로 당연히 0보다 작은 값이 존재하질 않겠죠. 따라서 사용하신 if, if else 내의 조건문은 항상 false가 되겠네요.


size를 표현하는 변수들의 타입은 대개 unsigned 인 경우가 많고, unsigned를 뺄셈에 이용하게 되면 이런 짜증나는 경우가 많이 발생하게 됩니다.

이 부분은 많은 사람들이 하는 실수니까 기억해두시는게 좋을 것 같습니다.

또, 저는 이 코드를 Visual Studio 에서 돌렸는데요.이런 경고가 떴습니다.

warning C4018: '<' : signed 또는 unsigned가 일치하지 않습니다.

코드를 컴파일할때 뜨는 warning 메세지에도 주의하시면서 코드를 작성하거나 고쳐보는 것도 매우 좋습니다. :)

leekh100000   9년 전

감사합니다.

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