C언어 포인터를 이용한 문자열 복사
코딩C언어
읽는데 4분 소요
처음 쓰여진 날: 2026-02-03
마지막 수정일: 2026-02-03
조회수: 16
요약
C언어에서 포인터를 이용해 문자열을 복사하는 방법을 알아봅니다. strcpy 함수의 원리와 포인터 증가 연산을 이해하고, 정보처리기사 실기에 출제되는 문자열 복사 문제를 풀어봅니다.
문자열 복사 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 문자열 복사 | 원본 문자열을 대상 배열에 복사 | strcpy(dest, src) |
| 포인터 증가 | 다음 문자 위치로 이동 | s++, d++ |
| 복사 종료 조건 | 널 문자('\0')를 만나면 종료 | while(*s) |
| const char* | 가리키는 값을 수정할 수 없는 포인터 | const char *s |
문자열 복사란?
문자열 복사는 원본 문자열의 내용을 다른 문자 배열에 그대로 옮기는 것입니다.
c
코드 하이라이팅 중...
표준 라이브러리의 strcpy 함수가 이 역할을 하지만, 시험에서는 포인터를 이용해 직접 구현한 복사 함수가 자주 출제됩니다.
포인터를 이용한 문자열 복사 함수
기본 구조
c
코드 하이라이팅 중...
매개변수 설명
| 매개변수 | 의미 | 역할 |
|---|---|---|
char *d | 대상(destination) 포인터 | 복사받을 배열의 시작 주소 |
const char *s | 원본(source) 포인터 | 복사할 문자열의 시작 주소 |
const char *s는 원본을 보호합니다
const 키워드가 붙으면 s가 가리키는 문자를 수정할 수 없습니다. 원본 문자열이 실수로 변경되는 것을 방지합니다.

동작 과정
예시 코드
c
코드 하이라이팅 중...
복사 전 상태
| 인덱스 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| str1 | 'f' | 'i' | 'r' | 's' | 't' | '\0' | |||||
| str2 | 't' | 'e' | 's' | 't' | 's' | 't' | 'r' | 'i' | 'n' | 'g' | '\0' |
단계별 동작
text
코드 하이라이팅 중...
복사 후 상태
| 인덱스 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | ... |
|---|---|---|---|---|---|---|---|---|
| str2 | 'f' | 'i' | 'r' | 's' | 't' | '\0' | 'r' | ... |
복사 후 str2의 유효한 문자열은 "first"입니다. 인덱스 5에 널 문자가 삽입되어 이후의 문자들은 무시됩니다.

while(*s)의 의미
while(*s)는 "s가 가리키는 값이 0이 아닌 동안" 반복합니다.
- 널 문자
'\0'의 ASCII 코드는 0입니다 *s가'\0'이면 조건이 거짓(0)이 되어 루프가 종료됩니다
c
코드 하이라이팅 중...
이 패턴은 문자열 처리에서 매우 자주 사용됩니다. 문자열 길이 계산이나 문자열 뒤집기에서도 동일한 원리를 사용합니다.
문자열 복사 후 길이 계산
복사된 문자열의 길이를 계산하는 패턴도 자주 출제됩니다.
c
코드 하이라이팅 중...
| 반복 | i | str2[i] | result |
|---|---|---|---|
| 1 | 0 | 'f' | 0 + 0 = 0 |
| 2 | 1 | 'i' | 0 + 1 = 1 |
| 3 | 2 | 'r' | 1 + 2 = 3 |
| 4 | 3 | 's' | 3 + 3 = 6 |
| 5 | 4 | 't' | 6 + 4 = 10 |
| 종료 | 5 | '\0' | - |
인덱스 합계와 문자열 길이를 구분하세요
위 예시에서 result는 인덱스의 합(0+1+2+3+4=10)이지, 문자열 길이(5)가 아닙니다. 문제가 무엇을 요구하는지 정확히 파악하세요.