C에서 strdup 함수 사용

Jinku Hu 2023년10월12일 C C String
  1. strdup함수를 사용하여 C에서 주어진 문자열 복제
  2. strndup함수를 사용하여 C에서 주어진 문자열 복제
  3. strdupa함수를 사용하여 C에서 주어진 문자열 복제
C에서 strdup 함수 사용

이 기사에서는 C에서strdup기능을 사용하는 방법에 대한 몇 가지 방법을 설명합니다.

strdup함수를 사용하여 C에서 주어진 문자열 복제

strdup은 대부분의 UNIX 기반 운영 체제에서 사용할 수있는 POSIX 호환 기능 중 하나입니다. 문자열 복사 기능을 구현하지만 내부적으로 메모리 할당 및 검사를 수행합니다. 사용자는strdupmalloc 함수 호출로 메모리를 할당하기 때문에 반환 된char 포인터를 해제해야합니다.

strdup은 복제 할 소스 문자열 인 단일 인수를 취하고 새로 복사 된 문자열에 대한 포인터를 반환합니다. 이 함수는 실패시, 즉 할당 할 메모리가 부족할 때 NULL을 반환합니다. 이 경우getenv 함수를 사용하여HOME 환경 변수를 검색하고strdup으로 값을 복사합니다.

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

int main(int argc, char *argv[]) {
  char *path = NULL;

  const char *temp = getenv("HOME");

  if (temp != NULL) {
    path = strdup(temp);

    if (path == NULL) {
      perror("strdup");
      exit(EXIT_FAILURE);
    }

  } else {
    fprintf(stderr, "$HOME environment variable is not defined\n");
    exit(EXIT_FAILURE);
  }

  printf("%s\n", path);
  free(path);

  exit(EXIT_SUCCESS);
}

출력:

/home/user

strndup함수를 사용하여 C에서 주어진 문자열 복제

strndup은 복사해야하는 바이트 수를 지정하기 위해 추가 인수를 사용하는 유사한 함수입니다. 이 버전은 문자열의 특정 부분 만 복사하는 데 유용합니다. 그러나strndup은 복사 된 문자에 종료 널 바이트를 추가하므로 C스타일 문자열 형식으로 저장되고 이와 같이 조작 할 수 있습니다.

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

int main(int argc, char *argv[]) {
  char *path = NULL;

  const char *temp = getenv("HOME");

  if (temp != NULL) {
    path = strndup(temp, 5);

    if (path == NULL) {
      perror("strdup");
      exit(EXIT_FAILURE);
    }

  } else {
    fprintf(stderr, "$HOME environment variable is not defined\n");
    exit(EXIT_FAILURE);
  }

  printf("%s\n", path);
  free(path);

  exit(EXIT_SUCCESS);
}

출력:

/home

strdupa함수를 사용하여 C에서 주어진 문자열 복제

strdupa는 GNU C 라이브러리의 일부이며 다른 C 컴파일러에서는 사용할 수 없습니다. strdupa는 메모리 할당에alloca를 사용한다는 점을 제외하면strdup 함수와 유사합니다. alloca함수는 스택 영역에 메모리 할당을 구현하고 호출 함수가 반환되면 영역이 자동으로 해제됩니다. 따라서strdupa에서 반환 된 포인터는 분할 오류가 발생하므로free 호출로 명시 적으로 해제해서는 안됩니다. 코드를 성공적으로 컴파일하려면_GNU_SOURCE 매크로를 정의해야합니다.

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

int main(int argc, char *argv[]) {
  char *path = NULL;

  const char *temp = getenv("HOME");

  if (temp != NULL) {
    path = strdupa(temp);

    if (path == NULL) {
      perror("strdup");
      exit(EXIT_FAILURE);
    }

  } else {
    fprintf(stderr, "$HOME environment variable is not defined\n");
    exit(EXIT_FAILURE);
  }

  printf("%s\n", path);

  exit(EXIT_SUCCESS);
}

출력:

/home/user
튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
작가: 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