042. 널 (NULL) 문자 이해하기
<결과>
길이 = 5
이게 지금 설명하려면 좀 어려울 수도 있는데 NULL 이라는건 0으로 define된 매크로 상수이다.
이런건 나중에 실력을 쌓고 알아보고 일단 풀어보자.
저번에 설명했는지 모르겠는데 문자열 뒤에는 보이진 않지만 \0 이 있다고 했다. 이걸 잘 생각하고 풀면 어렵지 않다.
7줄 - int len = length("abcde");
length 함수를 호출한다. 12줄로 가서 봐야 한다.
12줄 -int length(char *pstr)
7줄에 의해 이 함수가 호출되었다. 7줄에서 length("abcde")라고 했으니까 pstr로 받을 건 "abcde"가 된다.
16줄 ~ 20줄 - while (*pstr != NULL)
while은 반복문이라고 했다. 괄호안이 참이면 계속 실행한다.
저번에 문자열은 문자들이 모여서 문자열을 이룬다고 했다.
그럼 지금 써야 할 "abcde"는 'a', 'b', 'c', 'd', 'e' 가 모여서 저렇게 된거다.
그리고 얘네들이 메모리에 저장된 순서는 'a' 다음 'b' 이고 'c'가 들어가있다.
예를 들어 1000번지에 'a'가 있으면 1001 번지에 'b' 가 있는 식이다.
*pstr이 뭐라고 했는지 기억나죠?? 주소로 찾아서 들어갑니다. 그럼 'a'라는 값이 있겠죠?
그럼 첫 while 문을 실행할 땐 while('a' != NULL) 이런식으로 계산하겠죠.
'a' != NULL 이니까 참입니다. 그럼 pstr을 증가시킵니다. 다음계산식에선 'a' 다음번지에 있었던 'b'를 사용하겠죠?
while문을 다시 실행합니다. while('b' != NULL) ... while('e' != NULL) 까지는 실행한다는걸 알 수 있겠죠.
문자열 뒤에는 \0이라는게 있다고 했죠. NULL이랑 같다고 보시면 됩니다.
그다음 while('\0' != NULL) 이런식이겠죠. 그래서 while문을 빠져나갑니다.
그래서 len을 리턴합니다.
len값은 5 입니다.