C에서 부분 문자열 얻기

Jinku Hu 2023년10월12일
  1. strncpy 함수를 사용하여 C에서 하위 문자열 가져 오기
  2. 사용자 지정 함수를 사용하여 C에서 하위 문자열 가져 오기
C에서 부분 문자열 얻기

이 기사에서는 C에서 하위 문자열을 얻는 방법에 대한 여러 방법을 소개합니다.

strncpy 함수를 사용하여 C에서 하위 문자열 가져 오기

strncpy<string.h>헤더 파일에 정의 된 C 문자열 라이브러리 함수의 일부입니다. 소스 문자열에서 대상으로 지정된 수의 바이트를 복사합니다. strncpy는 대상char *, 소스 포인터, 복사 할 바이트 수를 나타내는 정수의 세 가지 매개 변수를 사용합니다. 지정된 바이트 수가 소스 문자열에 포함 된 것보다 많으면 추가 널 바이트가 대상에 저장됩니다.

strncpy 함수는 대상 문자열에 대한 포인터를 반환합니다. 따라서 호출을printf 문에 연결하여 하위 문자열을 직접 인쇄 할 수 있습니다. 다음 예제는 처음 4 자 하위 문자열을 인쇄 한 후 다음 10 자 하위 문자열을 인쇄하는 방법을 보여줍니다.

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

const char *tmp = "This string literal is arbitrary";

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", strncpy(str, tmp, 4));
  printf("%s\n", strncpy(str, tmp + 5, 10));

  free(str) exit(EXIT_SUCCESS);
}

출력:

This
string lit

사용자 지정 함수를 사용하여 C에서 하위 문자열 가져 오기

또는strncpy에 대한 사용자 정의 함수 래퍼를 정의하고 4 개의 매개 변수로 구성된 새 인터페이스를 지정할 수 있습니다. 즉, getSubstring함수는 대상 및 소스 문자열과 하위 문자열로 필요한 문자의 시작 및 끝 위치를 지정하는 두 개의 정수를 가져옵니다. 이 함수 프로토 타입은 추가 오류 검사를 구현하지 않지만strncpy 호출에서 전달 된char *포인터를 직접 반환합니다.

앞의 예와 마찬가지로getSubstringprintf 함수에 인수로 연결할 수도 있습니다. strncpy에 대한 한 가지주의 사항은 대상 및 소스 문자열이 메모리에서 겹치지 않아야한다는 것입니다. 또한 대상 포인터는 소스 문자열을 저장할 수있을만큼 충분히 큰 버퍼를 가리켜 야합니다.

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

const char *tmp = "This string literal is arbitrary";

char *getSubstring(char *dst, const char *src, size_t start, size_t end) {
  return strncpy(dst, src + start, end);
}

int main(int argc, char *argv[]) {
  char *str = malloc(strlen(tmp));

  printf("%s\n", getSubstring(str, tmp, 0, 4));
  printf("%s\n", getSubstring(str, tmp, 5, 10));

  free(str);
  exit(EXIT_SUCCESS);
}

출력:

This
string lit
작가: 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