strtok을 사용하다가 1번만 자른 뒤 나머지가 필요한 경우가 생겼다.
그래서 뒤적이다 보니 strsep라는 또다른 분리 함수를 찾았다. 하지만 이걸로도 해결은 불가능 했다.
원했던 만큼만 분리 후 나머지를 취할 수는 있었지만 strtok과는 다르게 구분자로 된 문자열을 통째로 분리하지 못했다. 이전에 포스팅 했던 strtok 샘플과 비교해보면 눈에 띄는 차이를 알 수 있다.
샘플은 이전 strtok 때 썼던 것을 재사용했다.

#include <STRING.H>  
int main( ) 
{ 
    char* token = NULL; 
    char* str = NULL;
    char str1[] = " ! This is\tStrtok,Test Program!!!! end\n"; 
    char  str2[] = " ,\t\n!"; 

    str = strdup( str1 );
    token = strsep( &str, str2 ); 
    while( token != NULL ) 
    { 
        printf( "token = %s", token ); 
        putchar( '\n' ); 
        token = strsep( &str, str2 ); 
    } 

    printf("검색이 완료된 원본 문자열 : %s\n",str1); 
    str = strdup( str1 );
    token = strsep( &str, str2 ); 
    printf( "token = %s", token ); 
    printf( "seped = %s", str ); 

  
    return 0; 
}

str로 시작하는 문자열 관련 함수가 꽤 있는데 이중에 문자열을 자르는데 유용한 strtok이란 함수가 있다.
아직 parser가 제대로 구현이 안되어 있어 이를 임시로 구현하는데 사용하게 되었다.
예제는 인터넷을 뒤지다가 찾은 것인데 이정도만 봐도 이해하는데 쉬울 것 같다. 출처를 표기해야하는데...까먹었네;
나중에 찾아보고 출처 기입해야함.

#include <STDIO.H>
#include <STRING.H>   //strtok함수는 string.h에 들어있습니다.

int main( )
{
    //분리된 문자열 보관용
    char *token = NULL;
    //분리할 문자열
    char str1[] = "This is\tStrtok,Test Program!!!! end\n";
    //' '이나 ','이나 '\t'이나 '\n'이 들어있는 문자열을 분리
    //구분자 지정
    char str2[] = " ,\t\n!";

    //strtok를 사용시 가장 유의할점은 원본이 손상 된다는 점입니다.
    //strtok에 넣어줄 첫번째 인자는 복사해서 사용하는 것이 좋습니다.

    //처음 토큰을 자른다.
    token = strtok( str1, str2 );
    //이후는 계속 반환된다.
    while( token != NULL )
    {
        //토큰별로 출력
        printf( "token = %s", token );
        //한칸 내리기
        putchar( '\n' );
        //반복해서 자르기. 첫번째 인자를 NULL처리하면 기존에 포인터에서 계속 자르게 됩니다.
        token = strtok( NULL, str2 ); 
    } 

    //strtok사용하고 난후의 원본 문자열이 손상된것을 알수 있습니다.
    printf("검색이 완료된 원본 문자열 : %s\n",str1);

    return 0;
}