C에서 strdup 함수 사용

Jinku Hu 2023년10월12일
  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
작가: 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