아임'준
[C언어] strcpy / strncpy 본문
*해당 글에 있는 코드들은 모두 복사해서 사용할 수 있게끔 만들어두었습니다. 주석만 보고 이해하려고 하지 말고 코드를 복사해서 직접 실행하며 그 결과를 통해 이해하고자 하면 더 도움이 될것입니다. 물론 그냥 복사 붙여넣기 하는 것보다 본인이 직접 코드를 타이핑하는 것이 이해와 후에 사용할 때에 더 큰 도움이 될 것이니 이 점 명심하고 공부해주시기 바랍니다.
strcpy / strncpy : <string.h>
strcpy / strncpy는 생김새에서 알 수 있듯이 둘이 비슷한 기능을 한다.
우선 strcpy와 strncpysms string.h 헤더파일에 들어가 있기 때문에 #include <string.h>를 해줘야 한다.
strcpy는 string copy / strncpy는 string n copy라고 외우면 된다.
기능 및 사용 방법은 아래와 같다.
//strcpy
strcpy(a,b); //문자열 a에 문자열 b를 복사해서 저장
//strncpy
strcpy(a,b,n); //문자열 a에 문자열 b를 n만큼만 복사하여 저장
strcpy와 strncpy 둘 다 a,b 자리에는 문자열이 들어가야 한다. 문자열의 경우 배열로 선언된 문자열이나 포인터로 선언된 문자열이나 상관 없다. strncpy의 경우 n은 정수가 들어가 한다. 둘 다 두번쨰 문자열 인자를 첫번째 문자열에 복사하여 저장해주는 기능을 한다.
strcpy와 strcnpy가 중요한 이유는 문자열을 선언했을 때 선언과 동시에 초기화를 하지 않으면 후에 값을 그냥 =을 통해 대입할 수 없기 때문이다. 그렇기 때문에 우리는 strcpy를 통해 입력받은 문자열을 우리가 선언한 문자열에 복사해서 저장하는 방식으로 값들을 관리할 수 있다. 배열, 구조체 등에서 아주 중요하다.
strcpy 사용 예시이다.
#include <stdio.h>
#include <string.h>
int main(){
char a[]="Hello";
char *b;
strcpy(b,a);
printf("%s",b);
}

strncpy 사용 예시이다.
#include <stdio.h>
#include <string.h>
int main(){
char a[]="Hello";
char *b;
strncpy(b,a,3);
printf("%s",b);
}

strncpy(b,a,3); 이라고 입력했으니 Hello의 3번째인 Hel까지만 복사된 것이다. strcpy(b,a,strlen(a)); 혹은 strcpy(b,a,sizeof(a)-1)와 같이도 사용할 수 있다.
다음 예시를 보자.
#include <stdio.h>
#include <string.h>
int main(){
char a[] = "Hello";
char b[] = "HelloTest";
strcpy(b,a);
printf("%s",b);
}
위 코드를 실행하면 b가 a보다 4글자 길었음에도 불구하고 a를 b에 복사해서 넣으면 Hello가 출력된다. 이는 strcpy 함수가 '\0'까지 복사하기 때문이다(문자열의 끝에는 NULL이 존재). 그 때문에 뒤에 "Test"가 나오지 않고 "Hello"만 나오는 것이다.
#include <stdio.h>
#include <string.h>
int main(){
char a[] = "Hello";
char b[] = "HelloTest";
strncpy(b,a,strlen(a));
printf("%s",b);
}
위의 코드와 다른 점은 strcpy가 아니라 strncpy로 바뀌었으며 strlen(a)까지 복사하게 만들었다는 것이다. strncpy는 '\0'을 신경쓰지 않고 복사하라고 지정한 길이까지만을 복사한다. 그러므로 아래 코드는 실행할 시 "HelloTest"에 앞부터 "Hello"가 복사돼어 다시 "HelloTest"가 출력될 것이다.
이번에는 strlen이 아닌 sizeof(a)를 사용하여 할 것이다. strlen은 문자열의 글자수를 알려주지만 sizeof는 '\0'까지 포함한 현재 변수가 차지하는 공간을 알려주기 때문에 차이가 난다. 그러므로 아래와 같이 코드를 실행할 경우
#include <stdio.h>
#include <string.h>
int main(){
char a[] = "Hello";
char b[] = "HelloTest";
strncpy(b,a,sizeof(a));
printf("%s",b);
}
'\0'까지 복사되어 이번에는 "Hello"만 출력될 것이다. strlen과 같은 결과가 나오는 것을 원한다면 sizeof(a)-1과 같이 입력할 수 있다.
질문, 오타 지적, 오류 지적 등은 댓글로 환영합니다.

'[C] > [C : 개념]' 카테고리의 다른 글
[C언어] strlen (0) | 2021.03.03 |
---|---|
[C언어] getchar / putchar (0) | 2021.02.15 |
[C언어] 파일 입출력 (0) | 2021.02.15 |
[C언어 기초] 구조체 (0) | 2021.02.10 |
[C언어 기초] 함수 (0) | 2021.01.28 |