for 종료 조건에 strlen 사용시 무한루프 발생

익명 사용자의 이미지

#include <stdio.h>
#include <memory.h>
 
int main() {
    char str[10];
    int i;
    int len;
    memset(str,0x00,sizeof(str));
 
    printf("strlen Test\n");
 
    for(i=0;i<strlen(str) - 1;i++)
        {
            printf("i(%d)=[%c]\n",i,str[i]);
        }
 
    return 0;
}

위와 같은 코드에서 str 의 길이가 0 이므로 for문 종료 조건이 -1 되므로 for문은 한번도 타지
않을거라 예상했는데 무한루프에 빠집니다. 원인이 뭘까요?
세벌의 이미지

strlen(str) - 1 값을 프린트 해 보셔요.답이 보일 거예요. 답 아니라면 힌트라도 보이겠죠.

익명 사용자의 이미지

안그래도 출력해 봤는데 -1로 출력이 되서 그랬습니다.
아래 댓글보고 이해 했습니다.
답변 달아주셔서 감사합니다.

라스코니의 이미지

원하는 데로 동작하는 코드는 아래와 같을 겁니다.
strlen()의 return 값이 size_t (unsigned, 부호없는 정수)이기에 (unsigned)(0 -1)로 평가되어 매우 큰 값이 되는 것 같네요.

for(i=0;i<(int)(strlen(str))-1;i++)
{
    printf("i(%d)=[%c]\n",i,str[i]);
}
익명 사용자의 이미지

감사 합니다. 이제 이해 했습니다.strlen 리턴이 unsigned int 였네요.
답글 달아 줘서 감사합니다.~~