C언어 요점 정리 - strcpy함수

2022. 1. 25. 15:20C언어

문자열을 복사하기 위해 사용되는 함수가 있습니다. 

strcpy라는 함수이고, 이 함수는 string copy에서 따온것 입니다.

저희가 printf(), scanf()를 사용하기 위해 stdio.h 헤더파일을 작성해준것처럼 strcpy함수를 사용하기 위해서는

<string.h> 헤더파일을 작성해주셔야합니다. 사용하는 방법은 strcpy(대상문자열, 원본문자열)로 원본문자열을 대상문자열에 복사하는 겁니다. 예를 들면 char s1[10] = "hello";로 배열을 만들고 문자열을 할당했어요. char s2[10]; 크기가 10인 배열을 선언했고요. 우리는 s1의 문자열을 s2에 복사하고 싶은거에요. 그럴때 strcpy(s2, s1); 이렇게 작성을 해주시면 s1의 문자열이 s2로 복사됩니다. strcpy(s2, "hello");라고 직접 넣어주셔도 됩니다.

다만 주의하실점은 복사된 결과의 크기보다 저장될 배열의 크기가 크거나 같아야 합니다. 크기가 더 작다면 복사가 되더라도 정상적인 문자열이 출력되지 않습니다. 또한 저희가 문자열을 다룰때 꼭 필요했던게 있죠. 널문자까지 포함된 크기가 들어갈 수 있어야합니다. 
방금까지 배열을 통한 문자열 복사였다면 문자열 포인터를 통한 복사를 하려고 한다면 어떻게 해야할까요? 

그냥 char * s1 = "Hello"; char* s2 = ""; 이렇게 선언하고 strcpy(s2, s1);함수를 실행하면 에러가 뜰것입니다. 

왜냐? s1과 s2는 상수처럼 수정이 불가능했던거 기억나실까요? 읽기전용이기에 쓰기가 불가능해서 그렇습니다. 그리고 s2는 지금 널문자만 들어가있는 공간이기에 s1문자열을 저장할 공간조차 없는거죠. 그래서 문자열 포인터에 문자열을 복사하려면 문자열이 들어갈 공간을 따로 마련해야됩니다. 공간을 마련해주는 함수가 뭐였죠? malloc이었죠. malloc을 사용하기 위해 <stdlib.h> 헤더파일 추가해주시고, char *s1 = "hello"; char *2 = malloc(sizeof(char) * 10); 10바이트 크기만큼 동적메모리를 할당해주시고 복사를 해주시면 잘 들어갈 수 있습니다.

728x90