본문 바로가기

프로그래밍/[C]

[C]strtok함수 연속사용 NULL문자

출처:C언어 코딩 도장

 

보통 위와 같은 방식으로strtok를 처음 사용한다.

 

첫째줄

char *ptr = strtok(s1, " ");는 직관적이다.

s1문자열 포인터를 입력으로 받아, 공백을 찾아서, 공백위치를 ptr값으로 반환한다.

 

그런데

ptr = strtok(NULL, " ");는 직관적이지 않다.

ptr = strtok(NULL, " ");를 char *ptr = strtok(s1, " ");처럼 해석을 하면

NULL을 입력으로 받아 공백을 찾아서 ptr값으로 반환한다.

 

 

첫째줄을 실행할떈 공백자리에 NULL을 넣고 포인터를 반환한다.

 

 

문제가 뭐냐면 처음 호출되었을때 s1문자열 포인터의 값은 어디에 갔느냐이다.

 

정답은 함수 내부적으로 따로 저장 되어 있다.

그래서 while문 이후에도 문자열 위치를 잊지 않고 반복적으로 strtok가 수행되었다.

 

이게 어디에 영향을 미칠수 있느냐 하면

윈도우 환경에서 CreateThread()등의 메소드로 쓰레드를 만들어 이용해 동시에 작업하는 경우 문제가 된다고 한다. 

떄문에 내부 변수를 저장하는 별도의 공간을 마련한후 쓰레드를 생성 하여야 한다.