개요
C 언어의 printf 함수는 다양한 형식 지정자를 통해 출력을 제어할 수 있는 강력한 기능을 제공한다. 그 중에서도 %.*s 형식 지정자는 문자열 출력 시 특정 길이만큼만 출력하도록 제어할 수 있는 유용한 도구이다. 본 글에서는 %.*s 형식 지정자의 개념, 작동 방식, 활용 사례 등을 상세히 다루고자 한다.
설명
%.*s 형식 지정자는 printf 함수에서 가변 길이의 문자열을 출력할 때 사용되는 특수한 형태의 지정자이다. 일반적인 %s 형식 지정자는 문자열의 끝(null 종결자)까지 모든 문자를 출력하지만, %.*s는 프로그래머가 지정한, 혹은 변수를 통해 동적으로 결정된 특정 길이만큼만 문자열을 출력한다.
%.*s에서 별표(*)는 정밀도(precision)를 의미하며, 이 값은 printf 함수의 매개변수를 통해 전달된다. 이 정밀도 값이 문자열에서 출력할 최대 문자 수를 결정한다. 만약 문자열의 길이가 지정된 정밀도보다 짧다면, 문자열 전체가 출력된다.
특징
%.*s 형식 지정자의 주요 특징은 다음과 같다:
- 가변 길이 출력: 프로그램 실행 중 결정되는 길이만큼 문자열을 출력할 수 있다.
- 버퍼 오버플로우 방지: 입력된 문자열이 예상보다 길더라도 지정된 길이만큼만 출력하여 버퍼 오버플로우 같은 문제를 예방할 수 있다.
- 정밀한 문자열 조작: 문자열의 일부분만 정확히 출력해야 하는 상황에서 유용하다.
- 동적 출력 형식: 런타임에 출력 길이를 결정할 수 있어 유연한 출력 형식을 구현할 수 있다.
- 메모리 효율성: 필요한 만큼만 문자열을 처리하므로 메모리 사용이 효율적이다.
예제
%.*s 형식 지정자의 활용 예제를 살펴보자:
기본 예제
#include <stdio.h>
int main() {
char str[] = "Hello, World!";
int length = 5;
printf("전체 문자열: %s\n", str);
printf("제한된 문자열: %.*s\n", length, str);
return 0;
}
출력 결과:
전체 문자열: Hello, World!
제한된 문자열: Hello
동적 길이 지정 예제
#include <stdio.h>
int main() {
char str[] = "Programming in C is fun";
for (int i = 1; i <= 10; i += 3) {
printf("%d개 문자 출력: %.*s\n", i, i, str);
}
return 0;
}
출력 결과:
1개 문자 출력: P
4개 문자 출력: Prog
7개 문자 출력: Program
10개 문자 출력: Programmin
부분 문자열 출력 예제
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "This is a test string";
char *ptr = strchr(str, 'a'); // 'a' 문자 위치 찾기
if (ptr != NULL) {
int position = ptr - str; // 'a' 문자의 위치
int remaining = strlen(str) - position; // 남은 문자 수
printf("'a' 이후 문자열: %.*s\n", remaining, ptr);
}
return 0;
}
출력 결과:
'a' 이후 문자열: a test string
결론
%.*s 형식 지정자는 C 언어에서 문자열 출력을 정밀하게 제어할 수 있는 강력한 도구이다. 동적으로 출력 길이를 지정할 수 있어 다양한 상황에서 유연하게 활용할 수 있으며, 특히 버퍼 오버플로우 방지나 특정 길이의 문자열만 표시해야 하는 상황에서 매우 유용하다. 이러한 형식 지정자를 이해하고 적절히 활용함으로써 더욱 안전하고 효율적인 C 프로그램을 작성할 수 있다.
참고 문헌
- C 언어 표준 라이브러리 문서: https://en.cppreference.com/w/c/io/fprintf
- The C Programming Language (2nd Edition) by Brian W. Kernighan and Dennis M. Ritchie
- C 형식 지정자 가이드: https://www.tutorialspoint.com/c_standard_library/c_function_printf.htm
- GNU C 라이브러리 문서: https://www.gnu.org/software/libc/manual/html_node/Formatted-Output.html
'Programming > C' 카테고리의 다른 글
C언어 문자열 연결 함수: strcat, strncat의 이해와 활용 (2) | 2025.04.14 |
---|---|
C/C++에서의 콤마(,) 연산자의 의미 (0) | 2025.04.11 |
pthread의 이해와 구현: 멀티스레딩 프로그래밍의 기초 (0) | 2025.04.08 |
C언어의 #error와 #line 전처리기 지시자 (0) | 2025.04.03 |
C언어에서 날짜 비교 및 만료일 계산 방법 (0) | 2025.04.02 |