본문 바로가기

C언어

21. 문자열 조작 함수 - strcpy와 strncpy 함수

2) 문자열을 복사하는 strcpy와 strncpy 함수

① strcpy 함수


#include <string.h>

char *strcpy(char *dest, const char* src);

이 함수는 dest로 전달된 배열에 src로 전달된 문자열을 복사한다.


#include 
#include 

int main(){
	char str1[20] = "Samuel P. Harbison";
	char str2[20];

	printf("Original String : %s\n", str1);

	strcpy(str2, str1); // str에 저장된 문자열을 str2에 복사
	printf("New String : %s\n", str2);

	return 0;
}


실행결과

Original String : Samuel P. Harbison
New String : Samuel P. Harbison
Press any key to continue


이 예제는 문제없지만 복사되는 문자열을 저자할 버퍼가 문자열의 길이보다 작으면 어떻게 될까?
배열의 Overflow가 발생된다.
위의 예제에서 만약 str2[10]일경우를 말한다. 이경우 컴파일러 묵인해 주는 경우도 있다 하지만 이것은 언제 에러를 발생할지 모르기 때문에 결과만보고 판단하면 안된다.

② strncpy 함수


#include <stdio.h>

char *strncpy(char *dest, cont char* src, size_t n);

src로 전달된 문자열을 dest로 전달된 배열에 복사를 한다. 단! 복사하는 문자열의 최대 길이는 n을 넘기지 않는다.


#include 
#include 

int main(){
	char str1[20] = "Samuel P. Harbison";
	char str2[10];

	printf("Original String : %s\n", str1);

	strncpy(str2, str1, sizeof(str2)-1);
	str2[sizeof(str2)-1] = '\0'; // null 문자 추가
	printf("New String : %s\n", str2);

	return 0;
}


실행 결과

Original String : Samuel P. Harbison
New String : Samuel P.
Press any key to continue


11줄에서는 str2의 문자열 끝에다가 null 문자를 삽입해 주고 있다.
문자열의 끝은 null문짜로 끝나야 하끼 때문이다. null문자를 삽입하지 않을시 문제가 발생할수 있다.

11줄을 주석처리후 실행 결과

Original String : Samuel P. Harbison
New String : Samuel P.儆?amuel P. Harbison
Press any key to continue