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;
}
실행 결과
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 언어 > C 언어 리이브러리 함수' 카테고리의 다른 글
[C언어] String.h 라이브러리 함수 - strcat() 함수 파헤치기 (0) | 2021.01.28 |
---|---|
[C언어] String.h 라이브러리 함수 - strncpy() 함수 파헤치기 (0) | 2021.01.25 |
[C언어] String.h 라이브러리 함수 - memmove() 함수 파헤치기 (0) | 2021.01.18 |
[C언어] String.h 라이브러리 함수 - memcpy() 함수 파헤치기 (0) | 2021.01.17 |
[C언어] String.h 라이브러리 함수 - strdup() 함수 파헤치기 (0) | 2021.01.17 |