C에서 strsep 함수 사용

Jinku Hu 2023년10월12일
C에서 strsep 함수 사용

이 기사에서는 C에서strsep함수를 사용하는 방법에 대한 여러 가지 방법을 보여줍니다.

strsep함수를 사용하여 문자열에서 주어진 토큰 찾기

strsep<string.h>헤더 파일에 정의 된 C 표준 라이브러리 문자열 유틸리티의 일부입니다. 문자열 개체에서 지정된 구분 문자로 둘러싸인 토큰을 추출하는 데 사용할 수 있습니다.

strsepchar *에 대한 포인터와char에 대한 포인터라는 두 개의 인수를 사용합니다. 첫 번째 인수는 검색해야하는 문자열의 주소를 전달하는 데 사용됩니다. 두 번째 매개 변수는 추출 된 토큰의 시작과 끝을 표시하는 분리 문자 세트를 지정합니다. 분리 문자는 추출 된 토큰 문자열에서 삭제됩니다. 첫 번째 토큰이 발견되면 발견 된 다음 구분 기호에 대한 포인터를 저장하도록 첫 번째 인수가 수정됩니다.

다음 예에서는strsep에 대한 단일 호출을 사용하여 주어진 문자로 구분 된 두 개의 토큰을 추출하는 방법을 보여줍니다. 프로그램은 2 개의 명령 줄 인수에서 설정된 문자열과 구분 기호를 가져오고 필요에 따라 제공되지 않으면 실패와 함께 종료됩니다. 다음으로,strsep가 전달 된 포인터를 수정하므로strdupa함수 호출로 문자열을 복제하고 원래 값을 잃고 싶지 않습니다. strdupa는 스택에 동적 메모리를 할당하며 호출자는 여기에서 반환 된 포인터를 해제해서는 안됩니다.

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
  char *str1, *token;

  if (argc != 3) {
    fprintf(stderr, "Usage: %s string delim\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  str1 = strdupa(argv[1]);
  if (!str1) exit(EXIT_FAILURE);

  token = strsep(&str1, argv[2]);
  if (token == NULL) exit(EXIT_FAILURE);

  printf("extracted: '%s'\n", token);
  printf("left: '%s'\n", str1);

  exit(EXIT_SUCCESS);
}

샘플 명령:

./program "hello there" t

출력:

extracted: 'hello '
left: 'here'

대안으로,strsep함수를 연속적으로 호출하는for루프를 구현할 수 있으며, 이전 예제 코드에서 볼 수 있듯이 첫 번째로 만난 것만이 아닌 지정된 구분 기호로 모든 토큰을 추출 할 수 있습니다. 그러나strsep는 두 개의 구분 문자가 한 행에있을 때 빈 문자열을 반환합니다. 따라서 호출자는 결과 토큰을 처리하기 전에이를 확인해야합니다. 이 페이지에 자세히 설명 된strtokstrtok_r라이브러리 함수를 사용하여 약간의 차이가있는 유사한 기능도 제공됩니다.

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
  char *str1, *token;

  if (argc != 3) {
    fprintf(stderr, "Usage: %s string delim\n", argv[0]);
    exit(EXIT_FAILURE);
  }

  str1 = strdupa(argv[1]);
  if (!str1) exit(EXIT_FAILURE);

  for (int j = 1;; j++) {
    token = strsep(&str1, argv[2]);
    if (token == NULL) break;
    printf("%d: '%s'\n", j, token);
  }

  exit(EXIT_SUCCESS);
}

샘플 명령:

./program "hello there" tl

출력:

1: 'he'
2: ''
3: 'o '
4: 'here'
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C String