회신: UNIT 45.1 문자열 자르기 질문합니다
, 도장_ 관리자님이 작성strtok() 함수는 두 가지 방식으로 동작합니다.
첫째는 첫 번째 인수에 대상 문자열을 넣어 문자열을 처음 자르는 겁니다.
둘째는 첫 번째 인수에 NULL을 넣어 이전에 자른 문자열을 이어서 자르는 겁니다.
UNIT 45.1에서 다음 부분을 자세히 읽어보세요.
자세히 설명하자면 NULL을 넣었을 때는 직전 strtok 함수에서 처리했던 문자열에서 잘린 문자열만큼 다음 문자로 이동한 뒤 문자열을 자릅니다. 만약 ptr = strtok(ptr, " ");처럼 잘린 문자열의 포인터를 다시 넣었을 때는 다음 문자로 이동하지 못하고 처음에 나오는 문자열만 계속 자르게 됩니다. 즉, 다음과 같은 결과가 나옵니다.
첫 번째 인수에 NULL을 넣으면 이전에 자른 문자열을 이어서 자른다.
ptr = strtok(ptr, " "); 을 반복해서 넣으면 같은 문자열만 반복해서 자르게 된다.
strtok() 함수는 처음 한 번 대상 문자열을 지정해주면 이후에는 대상 문자열이 어디에 있는지 알고 있습니다. 그래서 두 번째 호출부터는 NULL을 넣어 대상 문자열을 이어서 자를 수 있습니다.