2013년 1월 7일
ifstream 클래스를 사용하면서 문자열을 구간별로 끊어 읽어들이는 것이 필요했다.
그래서 사용하게 된 strtok.. 구분자를 통해 문자열을 구분할 수 있도록 해주는 함수이다.
예제 소스 |
std::ifstream infile; char szLine[4096] = { 0, }; infile.getline( szLine, 4096 ); pToken = strtok( szLine, ","); while( pToken = strtok( NULL, "," ) ) |
strtok 함수를 통해 szLine을 넘기게 되면 szLine의 내용이 버퍼에 저장이 된다.
두번째 strtok를 호출할 때 보면 첫번째 인자에 NULL이 들어가게 되는데 버퍼에 저장이 되었기 때문에
NULL을 인자로 넣어도 되는 것이다.
strtok함수를 통해 구분자를 찾게 되면 이 구분자를 '\0'으로 변환시켜버리고 해당 문자열의 첫번째 주소를 반환하게 된다.
그렇게 되면 반환된 char*는 '\0'까지의 문자열 즉, 구분자까지의 token을 얻게 되는 것이다.
▲ 변경되어버린 원본 문자열
주의할 점은 원본 문자열이 수정된 다는 것이다. 구분자가 '\0'로 변경되어 저장이 되어 버리는 것..
그러므로 변경되는 것을 원치 않는 다면 다른 공간이 복사 한 후에 사용을 해야 한다.
'Programming > C++' 카테고리의 다른 글
[C++] inet_addr, htons 함수 (1) | 2013.04.11 |
---|---|
[C++] static const에 대한 고찰 (0) | 2013.04.11 |
[C++] ifstream 클래스 (0) | 2013.04.11 |
[C++] 생성자 호출과 기본 타입 캐스팅간 우선순위 (0) | 2012.09.26 |
[C++] 링크시 나오는 에러 추적하기 (0) | 2012.09.26 |
댓글