문자열(string)은 널(null) 문자 '\0'로 끝나는 1차원 문자 배열입니다. C++에서는 한 문자열의 값을 다른 문자열로 복사할 수 있으며, 이는 표준 라이브러리 함수인 strcpy()를 사용하거나, 함수 없이 직접 구현하는 두 가지 방법으로 수행할 수 있습니다.
방법 1: strcpy() 함수 없이 문자열 복사하기
다음은 strcpy() 함수를 사용하지 않고 for 루프를 이용해 문자열을 복사하는 프로그램입니다.
예제
#include <iostream>
using namespace std;
int main() {
char str1[100] = "Magic";
char str2[100];
int i;
for(i = 0; str1[i] != '\0'; i++)
str2[i] = str1[i];
str2[i] = '\0';
cout<<"The contents of str2 are: "<<str2;
return 0;
}
출력 결과
The contents of str2 are: Magic
위 프로그램에서는 for 루프를 사용하여 str1의 내용을 str2로 한 글자씩 복사합니다. 루프는 인덱스 0부터 시작하여 str1의 널 문자('\0')를 만날 때까지 반복됩니다. 루프가 종료된 후에는 str2 끝에 널 문자를 추가하여 올바른 문자열로 완성한 뒤 화면에 출력합니다. 핵심 코드는 다음과 같습니다.
for(i = 0; str1[i] != '\0'; i++) str2[i] = str1[i]; str2[i] = '\0'; cout<<"The contents of str2 are: "<<str2;
방법 2: strcpy() 함수를 사용하여 문자열 복사하기
다음은 표준 라이브러리의 strcpy() 함수를 사용하여 문자열을 복사하는 프로그램입니다. strcpy()를 사용하려면 <cstring> 헤더 파일을 포함해야 합니다.
예제
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str1[100] = "Magic";
char str2[100];
strcpy(str2,str1);
cout<<"The contents of str2 are: "<<str2;
return 0;
}
출력 결과
The contents of str2 are: Magic
위 프로그램에서는 strcpy(str2, str1) 호출을 통해 str1의 전체 내용이 str2로 한 번에 복사됩니다. 첫 번째 인수는 복사 대상(목적지) 문자열이고, 두 번째 인수는 복사할 원본 문자열입니다. 복사가 완료되면 str2의 내용을 출력합니다.
strcpy(str2,str1); cout<<"The contents of str2 are: "<<str2;
참고: strcpy()는 대상 배열의 크기를 검사하지 않으므로, 원본 문자열보다 충분히 큰 배열을 사용해야 버퍼 오버플로우를 방지할 수 있습니다. 더 안전한 대안으로 strncpy() 함수나 C++의 std::string 클래스를 사용하는 것도 고려해볼 수 있습니다.