A sentimental robot

strdup함수 활용예제 본문

C

strdup함수 활용예제

GOD03219 2018. 1. 3. 09:35

기본적으로 strdup와 strcpy는 같은 기능을 가지고 있지만, 내부적인 기능이 다릅니다. strdup는 동적할당하는 heap영역에 새로 메모리(문자열)를 잡습니다. 그래서 최초에 strdup를 사용하여 문자열을 복사하고, 다시 수정할 시에는 free를 선언해야 합니다. 안그러면 잡았던 메모리가 garbage가 됩니다.

 

 

 

strcpy를 사용 시, 복사할 문자열이 복사될 문자열 공간보다 크면 문자열이 짤리는 경우가 발생합니다. 그런 단점을 보완해 주는 함수가 strdup입니다. strdup는 문자열공간 또한 동적할당을 해주기 때문에 앞서 말했던strcpy의 단점을 보완할 수 있습니다.

 


 

 

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

void main()
{
 char *name[5];    // 포인터 배열, 5개의 배열 안에 각 포인터가 있다.
 int i;


 name [0] = "Cho";  // code sigment( read only )영역에 문자열을 생성하고, 가르킴
 name [1] = "Eun";  // 이러한 경우는 데이터를 read 할 때 만 사용 -> 잘 안쓰임
 name [2] = "Bi";
 name [3] = "Hyun";
 name [4] = "Seong";

 

 //name[1][2]='x'; => writing 못함

 

 name[0] = strdup("Kim");    // writing 할 수 있음, 동적 할당이기 때문에 메모리 절약, 수정 시 free(name[0]) 해줘야 함

 

 for(i=0 ; i<5 ; i++)
      printf("%s\n",name[i]);


}

 

 


 

 

 

#include <stdio.h>
#include <string.h>  
#pragma warning(disable:4996);
void main()
{
 char *name[5];
 char buffer[100];

 int i;

 for(i=0 ; i<5 ; i++){
  scanf("%s",buffer);
  name[i] = strdup(buffer);
 }


 for(i=0 ; i<5 ; i++){
  printf("%s\n",name[i]);
 }


}

 


 

#pragma warning(disable:4996);
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main()
{
 int num;
 int i;
 char **name;
 char buffer[100];


 printf("how many?");
 scanf("%d",&num);

 

 name = (char **)malloc(sizeof(char*)*num);

 

 for(i = 0 ; i<num ; i++){
  printf("%d번째 이름 : ", i+1);
  scanf("%s",buffer);
  name[i] = strdup(buffer);
  
 }


 for(i = 0 ; i<num ; i++){
  printf("%s\n", name[i]);

 

 }

}

 

'C ' 카테고리의 다른 글

typedef structure  (0) 2018.01.03
함수포인터  (0) 2018.01.03
strdup함수 만들기  (0) 2018.01.03
strlen함수 만들기  (0) 2018.01.02
2차원배열 동적할당  (0) 2018.01.02