strcpy() 사용하기
Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 16번째.
여러분은 strlen()을 사용하여 문자열의 길이를 찾는 방법을 배웠습니다. 하지만 한 문자열의 내용을 다른 문자열로 복사해야 한다면 어떻게 해야 할까요? C 언어에서는 일반적인 변수에서 하듯이 대입 연산자(=)를 사용하여 문자열을 복사할 수 없습니다.
그 이유는 문자열은 문자 배열이며, 배열에 =를 사용하면 실제 내용이 아니라 메모리 주소만 복사하기 때문입니다. 이럴 때 <string.h> 라이브러리의 strcpy() 함수가 필수적이게 됩니다.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // "Hello"를 destination으로 복사합니다strcpy() 함수는 두 개의 인자를 받습니다: 대상 배열(복사할 위치)과 소스 문자열(복사할 내용). 이 함수는 널 종료 문자(null terminator)를 포함하여 소스에서 대상으로 각 문자를 복사합니다.
대상 배열이 전체 소스 문자열과 널 종료 문자(null terminator)를 포함할 수 있을 만큼 충분히 큰지 확인하는 것이 매우 중요합니다. 대상 배열이 너무 작으면, strcpy()는 배열 경계를 넘어 데이터를 작성하여 정의되지 않은 동작(undefined behavior)을 유발합니다.
이 함수는 C 언어에서 문자열 조작을 위한 기본이며, 문자열을 복제하고, 기존 콘텐츠로 문자열 변수를 초기화하며, 추가 처리를 위해 문자열을 준비할 수 있게 해줍니다.
챌린지
쉬움strcpy() 함수를 사용하여 문자열 복사를 수행하는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 수행할 문자열 작업의 횟수를 나타내는 정수
n을 읽습니다. - 각 작업에 대해:
- 입력으로부터 소스 문자열(source string)을 읽습니다.
- 100개의 요소를 가진
destination이라는 이름의 문자 배열을 선언합니다. strcpy()를 사용하여 소스 문자열을 destination 배열로 복사합니다.- 원본 소스 문자열과 복사된 destination 문자열을 모두 출력합니다.
- 모든 작업이 끝난 후, 복사된 문자열이 독립적임을 증명하기 위해 다음을 수행합니다:
- 마지막 destination 배열의 첫 번째 문자를 'X'로 수정합니다.
- 수정된 destination 문자열을 출력하여 변경되었음을 보여줍니다.
strcpy() 함수를 사용하려면 <string.h> 헤더를 포함해야 함을 기억하세요.
출력은 다음과 같은 형식으로 결과를 표시해야 합니다:
Source: [source_string]
Destination: [copied_string]
Source: [source_string]
Destination: [copied_string]
...
Modified last destination: [modified_string]예를 들어, 입력이 다음과 같다면:
3
hello
world
programming출력은 다음과 같아야 합니다:
Source: hello
Destination: hello
Source: world
Destination: world
Source: programming
Destination: programming
Modified last destination: Xrogramming이 챌린지는 한 문자 배열에서 다른 문자 배열로 문자열 내용을 복사하기 위해 strcpy()를 사용하는 방법, destination 배열을 위한 적절한 메모리 할당, 그리고 복사된 문자열이 소스와 독립적임을 이해하고 있는지 테스트합니다.
치트 시트
C에서 문자열을 복사하려면 <string.h> 라이브러리의 strcpy()를 사용하세요. 대입 연산자(=)는 실제 내용이 아니라 메모리 주소만 복사하기 때문에 문자열을 복사하는 데 사용할 수 없습니다.
#include <stdio.h>
#include <string.h>
char source[] = "Hello";
char destination[20];
strcpy(destination, source); // "Hello"를 destination으로 복사합니다strcpy() 함수는 두 개의 인수를 받습니다: 대상 배열(복사할 위치)과 소스 문자열(복사할 내용)입니다. 이 함수는 널 종료 문자를 포함하여 소스의 각 문자를 대상으로 복사합니다.
정의되지 않은 동작을 방지하려면 대상 배열이 전체 소스 문자열과 널 종료 문자를 포함할 수 있을 만큼 충분히 커야 합니다.
직접 해보기
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char source[100];
char destination[100];
// TODO: 여기에 코드를 작성하세요
// n개의 문자열 연산을 처리하기 위해 반복문을 사용하세요
// 각 연산에 대해:
// - 소스 문자열을 읽습니다
// - strcpy()를 사용하여 소스를 대상으로 복사합니다
// - 두 문자열을 필요한 형식으로 출력합니다
// TODO: 반복문이 끝난 후, 마지막 대상 문자열의 첫 번째 문자를 수정하고
// 수정된 문자열을 출력하세요
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.