for 종료 조건에 strlen 사용시 무한루프 발생
글쓴이: 익명 사용자 / 작성시간: 월, 2024/12/23 - 2:45오후
#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문은 한번도 타지
않을거라 예상했는데 무한루프에 빠집니다. 원인이 뭘까요?
Forums:

strlen(str) - 1 값을 프린트 해 보셔요
strlen(str) - 1 값을 프린트 해 보셔요.답이 보일 거예요. 답 아니라면 힌트라도 보이겠죠.
세벌 https://sebuls.blogspot.kr/
안그래도 출력해 봤는데 -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 리턴이
감사 합니다. 이제 이해 했습니다.strlen 리턴이 unsigned int 였네요.
답글 달아 줘서 감사합니다.~~
댓글 달기