본문 바로가기
카테고리 없음

문자열 자르기 (strtok, strtok_s) 함수 사용법 & 예제 +구현

by kangs' tong 2023. 11. 24.

strtok 함수란?

strtok 함수는 문자열을 구분자(delimiter)로 나누는 역할을 한다. C 표준 라이브러리인 <string.h>에 정의되어 있으며, 문자열을 변경하지 않고 원래 문자열에서 토큰(token)을 추출한다.

strtok 함수의 사용법

strtok 함수의 원형은 다음과 같다.

char *strtok(char *str, const char *delim);
  • str : 나눌 문자열을 가리키는 포인터. 최초 호출 시에는 문자열 전체를 넣어주고, 이후부터는 NULL로 지정하여 호출한다.
  • delim : 구분자 문자열을 가리키는 포인터. 문자열 중에 있는 구분자를 기준으로 토큰을 분리한다.

위 함수는 첫 번째 토큰을 반환하고, 그 이후에는 호출할 때마다 다음 토큰을 반환한다. 분리된 토큰은 원래의 문자열에서 NULL로 치환되므로, strtok 함수를 사용한 후에는 원본 문자열이 변경된다.

strtok_s 함수의 사용법

strtok_s 함수는 strtok 함수와 기능은 동일하지만, 보다 안전하게 사용할 수 있도록 개선된 버전이다. C11 표준에 추가되었으며, C11을 지원하는 컴파일러에서 사용할 수 있다.

strtok_s 함수의 원형은 다음과 같다.

char *strtok_s(char *str, const char *delim, char **context);
  • str : 나눌 문자열을 가리키는 포인터. 최초 호출 시에는 문자열 전체를 넣어주고, 이후부터는 NULL로 지정하여 호출한다.
  • delim : 구분자 문자열을 가리키는 포인터. 문자열 중에 있는 구분자를 기준으로 토큰을 분리한다.
  • context : strtok_s 함수 내부에서 쓰이는 상태 정보를 나타내는 포인터. 최초 호출 및 이후 호출 시에는 같은 주소를 사용해야 한다.

strtok_s 함수는 세 번째 인자로 상태 정보를 나타내는 포인터(context)를 받아오는데, 이를 통해 여러 스레드에서 동시에 strtok_s 함수를 사용할 수 있다.

strtok 함수 예제

아래 예제는 구분자를 이용하여 문자열을 나누는 기능을 구현한 코드이다.

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

int main() {
    char str[] = "apple,banana,grape";
    char *token;

    token = strtok(str, ",");
    while (token != NULL) {
        printf("%s\n", token);
        token = strtok(NULL, ",");
    }

    return 0;
}

위 코드를 실행하면 다음과 같은 결과가 출력된다.

apple
banana
grape

strtok_s 함수 예제

아래 예제는 strtok_s 함수를 사용하여 동일한 기능을 구현한 코드이다.

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

int main() {
    char str[] = "apple,banana,grape";
    char *token;
    char *context = NULL;

    token = strtok_s(str, ",", &context);
    while (token != NULL) {
        printf("%s\n", token);
        token = strtok_s(NULL, ",", &context);
    }

    return 0;
}

위 코드를 실행하면 동일한 결과가 출력된다.

마무리

위 소개한 strtok 함수와 strtok_s 함수는 문자열을 구분자로 나누는 기능을 제공한다. strtok 함수는 원본 문자열을 변경하며, strtok_s 함수는 strtok 함수보다 보다 안전하게 사용할 수 있는 개선된 버전이다. 이러한 함수들을 효과적으로 사용하여 문자열을 처리할 수 있다.

댓글