47.1 회문 질문
, 강 희진님이 작성유닛 41에 보면 strlen으로 길이 구할 때 NULL은 포함되지 않는다고 했는데 47.1을 보면 for문자안에 if(word[i] != word[length - 1 - i]라고 쓰여 있는데 level을 입력하면 길이는 5고, 그렇기 때문에 i=0일 때 word[0]하고 word[4]를 비교하는 것 아닌가요? 그러면 1이 아니라 0이 나와야 하는데 어떻게 가능한지 궁금합니다.
Re: 47.1 회문 질문
, 도장_ 관리자님이 작성level을 입력했을 때 strlen("level")의 결과는 5입니다.
"level" 문자열이 C 언어 내부에 저장될 때는 끝에 널 문자가 붙습니다.
실제로는 level + \0이 저장되어 있겠지요.
strlen은 널 문자를 제외한 level 문자열의 길이만 반환합니다.
문자열 인덱스는 0부터 시작합니다.
level 문자열에서 첫 번째 문자 l은 인덱스 0이고, 다섯 번째 문자 l은 인덱스 4입니다.
word[0]은 l
word[4]는 l
따라서 둘을 비교하면 일치합니다.
length / 2를 계산하는 과정도 이해할 필요가 있습니다. length가 정수형으로 선언되었기 때문에 소수점 이하의 결과는 버려집니다.
length가 홀수여서 /2를 한다면 소수점이 버려진 값이 됩니다.
length가 5라면 5 / 2 = 2가 됩니다.
그림 인덱스와 널문자, length로 위치를 계산하는 과정은 그림 47-2를 참고하세요.