본문 바로가기
Programming/C++

[C++] strtok 함수

by ★용호★ 2013. 4. 11.

2013년 1월 7일 

 

ifstream 클래스를 사용하면서 문자열을 구간별로 끊어 읽어들이는 것이 필요했다.

그래서 사용하게 된 strtok.. 구분자를 통해 문자열을 구분할 수 있도록 해주는 함수이다.

 

 예제 소스

 std::ifstream infile;
infile.open( "..Data.csv", std::ios::in | std::ios::binary );

char szLine[4096] = { 0, };

infile.getline( szLine, 4096 );
ZeroMemory( szLine, sizeof(szLine) );
while( !infile.eof() )
{
 infile.getline( szLine , 4096 );
 char szTemp[64] = { 0, };
 char *pToken = NULL;

 pToken = strtok( szLine, ","); 
 if( !pToken ) continue;

 while( pToken = strtok( NULL, "," ) )
 {
  if( !pToken ) continue;
 }
}

 

strtok 함수를 통해 szLine을 넘기게 되면 szLine의 내용이 버퍼에 저장이 된다.
두번째 strtok를 호출할 때 보면 첫번째 인자에 NULL이 들어가게 되는데 버퍼에 저장이 되었기 때문에
NULL을 인자로 넣어도 되는 것이다.


strtok함수를 통해 구분자를 찾게 되면 이 구분자를 '\0'으로 변환시켜버리고 해당 문자열의 첫번째 주소를 반환하게 된다.
그렇게 되면 반환된 char*는 '\0'까지의 문자열 즉, 구분자까지의 token을 얻게 되는 것이다.

 

 

▲ 변경되어버린 원본 문자열


주의할 점은 원본 문자열이 수정된 다는 것이다. 구분자가 '\0'로 변경되어 저장이 되어 버리는 것..
그러므로 변경되는 것을 원치 않는 다면 다른 공간이 복사 한 후에 사용을 해야 한다.

댓글