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)로 평가되어 매우 큰 값이 되는 것 같네요.
감사 합니다. 이제 이해 했습니다.strlen 리턴이
감사 합니다. 이제 이해 했습니다.strlen 리턴이 unsigned int 였네요.
답글 달아 줘서 감사합니다.~~
댓글 달기