본문 바로가기

자료구조

strdup 와 strcpy 의 차이점은? (feat. 전화번호부 만들기 V1)

반응형

앞서 작성한 전화번호부 소스의 add 함수에서 strdup 를 이용하여 입력받은 데이터를 저장하는 부분이 있다.

 

https://blesslee.tistory.com/18

 

전화번호부 만들기 V1

앞서 학습한 배열과 포인터를 이용하여 간단한 전화번호부 프로그램을 작성하고자 한다. 동작 목표 - 사용자에게 입력받는 부분은 '$ ' 프롬프트를 이용하여 입력받음 - 이름, 전화번호를 저장 -

blesslee.tistory.com

 

strcpy 는 단순히 (strcpy (a, b)) b에 저장된 문자열을 a에 저장하는 함수이다.

전화번호부 소스처럼 char * 타입 배열에 입력받은 문자열 배열을 저장하려 하면 정상적으로 저장이 되지 않는다.

 

strdup 는 string.h 헤더파일에 포함된 함수로 내부적으로 배열을 만들고 매개변수로 받은 문자열을 복사하여 반환한다.

입력받은 문자열의 크기 + 1  (문자열+\0 값 입력을 위해) 의 배열을 생성하여 문자열을 복사하여 저장하고 해당 값을 리턴하는 구조로 되어있다.

 

char * strdup(char * s) {
       char *p;
       p = (char *)malloc(strlen(s)+1)
       if(p != null)
              strcpy(p, s);
       return p;
}

strdup 의 동작 방식

입력받은 배열의 주소값(s)을 함수 내부적으로 p라는 배열을 입력받은 s의 문자열길이보다 +1 길이의 배열로 malloc 을 이용하여 동적 메모리 할당을 통해 생성하고 (실제 s 라는 배열은 s[4] 로 선언되어있으며, 'abc' 라는 문자열을 저장하고 있다고 가정하였을 때 strlen(s) 를 통해 길이를 확인하면 3으로 출력된다. 길이가 3인 문자열을 저장하기 위해서는 마지막에 '\0' 문자를 입력하여주어야 정상적으로 입력이 되기 때문에 실제 p 배열을 생성할 때는 +1 하여 생성한다.) strcpy 를 통해서 동적메모리 할당된 p 에 s의 값을 저장한다.

 

전화번호부 소스에서 strdup 를 사용하는 이유는 C 언어에서 사용되는 변수의 성격에 따른 영향이다.

 

변수에 관한 부분은 다음 장에서 다루도록 하겠다.

반응형

'자료구조' 카테고리의 다른 글

전역변수와 지역변수 (feat. 전화번호부 만들기 V1)  (0) 2022.11.21
전화번호부 만들기 V1  (0) 2022.11.21
문자열 연습문제 - 2  (0) 2022.11.17
문자열 연습문제 -1  (2) 2022.11.17
문자열 - 3  (0) 2022.11.17