반응형

strtok(3)

#include <string.h>

char *strtok(char *str, const char *delim);

strtok(3)은 str문자열을 delim에 포함된 문자들 중에서 하나를 만나는 곳을 null-terminated 문자열로 변경하여 return합니다. str문자열이 NULL이면 그 다음 delimiter까지의 문자열을 return합니다.

 

※주의: strtok(3)함수는 내부적으로 static 변수를 사용하여 처리되므로 multi-thread 프로그램에서는 오류를 유발할 수 있으므로 strtok_r(3)을 이용하는 것이 좋습니다.

 

※주의: delimiter가 연속으로 있는 경우에는 delimiter와 delimiter 사이의 값인 ""가 return되지 않습니다.

delimiter로 시작하거나 delimiter로 끝나는 경우에도 ""를 return하지 않습니다.

예를들면, Comma(,)로 분리된 데이터를 에서 a,,b,c의 경우 "a", "", "b", "c"로 분리되지 않고 "a", "b","c"로 분리됩니다.

 

※주의: strtok(3)함수는 파라미터 type(const가 빠짐)을 보면 알 수 있듯이

원본 문자열인 str 문자열의 값이 변경되므로 strtok(3)함수를 실행하기전에

원본 훼손이 되면 안되는 경우에는 다른 변수에 복제하여 본제된 문자열을 사용하여야 합니다.

 

 

파라미터

str
    - delimiter단위로 분리할 문자열.
    - NULL이면 static 변수에서 저장하고 있던 이전에 호출한 위치 다음부터 분리작업을 진행합니다.
    
    ※주의 : str문자열은 변경이 일어나기 때문에 원본 문자열을 보존하려면 
    임시변수에 복사한 후 임시변수를 사용하기 바랍니다.
delim
    - 문자열을 분리할 delimiter 문자들. 
    - delim에 포함된 아무 문자라도 만나면 분리함.

 

RETURN

NULL 아님
    - 정상적으로 delimiter로 분리하였으며, 분리된 문자열의 시작 pointer를 return합니다.

NULL
    - 분리할 데이터가 더 이상없습니다.

 


활용 예제

 

#include <string.h>
#include <stdio.h>

/* /또는 - 또는 : 또는 space를 delimiter로 사용합니다. */
#define DELIM_CHARS     "/-: "

int main(int argc, char **argv)
{
    char time[1024] = "2017-02-12 10:25:30";
    char *ptr;

    printf("time : [%s]\n", time);
    ptr = strtok(time, DELIM_CHARS);

    while(ptr) {
        printf("ptr = [%s]\n", ptr);
        
        ptr = strtok(NULL, DELIM_CHARS);
    }

    return 0;
}

결과:
time : [2017-02-12 10:25:30]
ptr = [2017]
ptr = [02]
ptr = [12]
ptr = [10]
ptr = [25]
ptr = [30]
반응형
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

,