strtok함수의 동작 순서가 잘 이해가 안 됩니다. 45.1에 나오는 소스 코드에서 처음에 공백문자를 찾아서 NULL로 채운 다음에 첫 부분인 "The"를 자르는 건 이해가 되는데 그 다음 동작부터 이해가 잘 안 됩니다. strtok(대상 문자열, 기준문자) 이 서식으로 해서 사용하는거 아닌가요?... 그럼 대상 문자열 대신에 NULL을 넣으면 오류가 발생해야 되는 거 아닌가요?... NULL을 넣었는데 어떻게 앞에서 잘린 문자열 만큼 다음 문자로 이동하게 되는 건가요?...
strtok() 함수는 두 가지 방식으로 동작합니다.
첫째는 첫 번째 인수에 대상 문자열을 넣어 문자열을 처음 자르는 겁니다.
둘째는 첫 번째 인수에 NULL을 넣어 이전에 자른 문자열을 이어서 자르는 겁니다.
UNIT 45.1에서 다음 부분을 자세히 읽어보세요.
자세히 설명하자면 NULL을 넣었을 때는 직전 strtok 함수에서 처리했던 문자열에서 잘린 문자열만큼 다음 문자로 이동한 뒤 문자열을 자릅니다. 만약 ptr = strtok(ptr, " ");처럼 잘린 문자열의 포인터를 다시 넣었을 때는 다음 문자로 이동하지 못하고 처음에 나오는 문자열만 계속 자르게 됩니다. 즉, 다음과 같은 결과가 나옵니다.
첫 번째 인수에 NULL을 넣으면 이전에 자른 문자열을 이어서 자른다.
ptr = strtok(ptr, " "); 을 반복해서 넣으면 같은 문자열만 반복해서 자르게 된다.
strtok() 함수는 처음 한 번 대상 문자열을 지정해주면 이후에는 대상 문자열이 어디에 있는지 알고 있습니다. 그래서 두 번째 호출부터는 NULL을 넣어 대상 문자열을 이어서 자를 수 있습니다.