티스토리 뷰
🔷 C언어 문자열 포인터와 서식문자 — 포인터와 문자열 출력의 모든 것
✅ 문자열과 포인터
C언어에서 문자열과 포인터는 밀접한 관계가 있습니다. 문자열은 사실 글자들이 메모리에 연속적으로 저장된 배열이며, 그 배열의 첫 번째 원소의 주소를 이용해 문자열 전체를 처리합니다.
예를 들어 다음과 같이 선언된 코드를 살펴보겠습니다.
char* p = "APPLE";
문자열 리터럴 "APPLE"
은 프로그램 실행 시 메모리의 특정 영역에 저장됩니다. 이때 p
는 그 메모리의 시작 주소, 즉 첫 글자 'A'
가 저장된 위치를 가리키게 됩니다.
메모리 내부 상태는 다음과 같습니다.
메모리 주소 | 값 |
---|---|
p | A |
p+1 | P |
p+2 | P |
p+3 | L |
p+4 | E |
p+5 | \0 |
마지막에는 문자열의 끝을 알리는 널 종료 문자 \0
가 자동으로 포함됩니다. 포인터 p
가 문자열을 가진다는 것은 문자 배열의 시작 위치를 알고 있다는 뜻입니다.
✅ 포인터 연산과 문자열
포인터에 정수를 더하거나 빼면, 포인터가 가리키는 메모리 위치가 이동합니다. 문자열 포인터의 경우 글자 하나의 크기는 1바이트이므로 p+1
은 두 번째 글자 'P'
의 주소를 가리킵니다. 마찬가지로 p+2
는 세 번째 글자, p+3
은 네 번째 글자를 가리킵니다.
포인터 연산을 한 뒤 역참조(*
)하면 해당 위치의 문자를 가져올 수 있습니다.
예시:
*p // 첫 글자 'A'
*(p+1) // 두 번째 글자 'P'
*(p+4) // 다섯 번째 글자 'E'
포인터 연산 없이도 배열 첨자 표기법을 사용할 수 있으며, 아래 표현들은 완전히 동일하게 동작합니다.
p[0] == *p
p[1] == *(p+1)
p[4] == *(p+4)
✅ 서식문자 %s와 %c
🔷 %s — 문자열 출력
서식문자 %s
는 문자열의 시작 주소를 전달받아 출력합니다. printf("%s\n", p);
라고 하면 p
가 가리키는 주소부터 널 종료 문자 \0
이 나올 때까지의 문자를 연속적으로 출력합니다. 즉, p
가 "APPLE"
의 시작 위치라면 전체 문자열이 출력됩니다.
또한 포인터 연산을 이용해 문자열의 특정 위치에서부터 출력할 수도 있습니다.
printf("%s\n", p+1); // PPLE
printf("%s\n", p+2); // PLE
🔷 %c — 단일 문자 출력
서식문자 %c
는 하나의 문자를 출력합니다. 포인터를 역참조해 해당 위치의 문자를 하나 출력하거나, 배열 첨자 표기법으로 특정 위치를 선택해도 됩니다.
printf("%c\n", *p); // A
printf("%c\n", *(p+3)); // L
printf("%c\n", p[4]); // E
문자열의 특정 위치에서 한 글자만 필요할 때 유용합니다.
✅ 정리
문자열을 출력할 때와 문자를 출력할 때는 포인터가 가리키는 대상은 같지만 출력 방식이 다릅니다. %s
는 포인터가 가리키는 위치에서부터 연속된 문자열을 출력하고, %c
는 해당 위치의 1바이트 값만 출력합니다. 또한 포인터에 정수를 더해 원하는 위치로 이동한 뒤 역참조하거나 배열처럼 첨자를 사용해 특정 문자를 선택할 수 있습니다.
문자열과 포인터, 그리고 서식문자의 동작 방식을 올바르게 이해하면 C언어의 문자열 처리에서 헷갈림 없이 정확하게 코드를 작성할 수 있습니다.
'C언어' 카테고리의 다른 글
qsort와 compare 완벽 이해 (0) | 2025.07.18 |
---|---|
C언어 구조체 포인터의 점(.)과 화살표(->) 차이 설명 (0) | 2025.07.15 |
C언어 printf 소수점 출력 완전 정리 (0) | 2025.07.13 |
비트연산자 << 와 >> 총정리 (0) | 2025.07.10 |
C언어 2차원 배열과 포인터 정리 (0) | 2025.07.07 |
- Total
- Today
- Yesterday
- 코딩 테스트
- 파이썬
- 알고리즘기초
- 알고리즘
- dfs
- 동적계획법
- 파이썬코딩
- 브루트포스
- c언어
- 문제풀이
- 파이썬문제풀이
- 알고리즘문제풀이
- 코딩
- Python
- C++
- 그리디
- 객체지향
- 그리디알고리즘
- 백준
- 그래프 탐색
- DP
- 알고리즘 문제풀이
- 프로그래밍
- c++알고리즘
- 동적 계획법
- C++ 알고리즘
- 코딩테스트
- python 알고리즘
- 문자열처리
- 문제 풀이
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |