본문으로 바로가기
728x90
반응형
strcpy() 함수의 헤더 파일
#include <string.h>

 

strcpy() 함수의 원형
char * strcpy(char * des, const char * src);

 

Parameter
des
데이터를 복사할 주소이고 char * 형으로 전달된다.
src
복사할 데이터가 존재하는 위치의 주소이고 char * 형으로 전달된다.

 

리턴 값
des 주소가 char * 형으로 리턴된다.

 

strcpy는 다른 문자열 복사 함수와 비슷하고 사용법도 간단합니다.

 

src에서 des로 복사를 하죠!

 

그런데 유의해야 될 사항이 두 가지 있습니다.

1. 바로 '\0' 요 녀석입니다.

 

strcpy 함수의 내부는 src에서 '\0' 요 녀석을 찾아 '\0' 요녀석까지 des로 복사를 해줍니다.

가끔 '\0' 요녀석을 분실한 문자열들은 프로세스를 죽이는 중요한 요인이 되기도 합니다.

그래서 strncpy나 memcpy로 특정 size를 복사하는 것을 더 추천드립니다.

 

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

int main(){
  char str1[20] = "hello world!!";
  char str2[20];
  char * des;
  
  //str1[5] = '\0';							//'\0'이 중간에 들어가면 해당 영역까지만 복사

  des = strcpy(str2, str1);

  printf("*************************\n");

  printf("str1 addr : %x\n", str1);
  printf("str2 addr : %x\n", str2);
  printf("des addr : %x\n", des);

  printf("str1: [%s]\n", str1);
  printf("str2: [%s]\n", str2);
  printf("des: [%s]\n", des);

  printf("*************************\n");

  return 0;
}
실행 결과

'\0' 문자열 마지막에 있어 HELLO WORLD!!가 복사된 모습
'\0' 문자가 중간에 들어가서 HELLO 만 복사된 모습

 

2. strcpy 함수는 복사를 하지만 내부에서 메모리 할당을 해주지 않기 때문에 포인터형을 사용하는 경우 에러가 발생합니다. 메모리가 할당되어 있는지 유의하셔서 사용하셔야 됩니다.

 

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

int main(){
  char *str1 = "hello world!!";
  char *str2 = NULL;
  char * des;

  printf("str2 addr : %x\n", str2);

  des = strcpy(str2, str1);

  printf("*************************\n");

  printf("str1 addr : %x\n", str1);
  printf("str2 addr : %x\n", str2);
  printf("des addr : %x\n", des);

  printf("str1: [%s]\n", str1);
  printf("str2: [%s]\n", str2);
  printf("des: [%s]\n", des);

  printf("*************************\n");

  return 0;
}

 

실행결과

메모리가 할당되지 않는 영역에 문자열을 복사하려고 하니 seqmentation fault 가 발생합니다.

strcpy 함수를 사용할 때는 메모리가 잘 할당되어 있는지 유의하셔야 됩니다.

 

 

 

다른 string.h 파일의 함수에 대해 알고 싶으시다면 String.h 함수 파헤치기!!

 

C언어 라이브러리 - String.h 헤더 파일 분석하기(String.h 함수 모음)

c언어를 사용하시거나 해보셨던 분들은 대부분 memcpy, memset 함수를 사용해보셨을 텐데요. 해당 함수를 사용하기 위해서는 String.h 파일을 포함시켜줬던 기억이 나실겁니다. 요렇게요 #include #include

idsn.tistory.com

 

반응형