C 프로그래밍에서는 데이터 형식 간의 변환이 자주 필요합니다. 특히 문자열을 숫자로 변환하거나, 반대로 숫자를 문자열로 변환해야 하는 경우가 많은데요. 이 글에서는 C 언어에서 이러한 변환을 수행하는 표준 함수 두 가지를 예제 코드와 함께 자세히 알아보겠습니다.
변환에 사용되는 두 가지 함수
C 언어에서는 stdio.h 헤더 파일에 포함된 다음 두 함수를 사용하여 변환을 수행할 수 있습니다.
- sscanf() — 문자열을 숫자로 변환
- sprintf() — 숫자를 문자열로 변환
두 함수의 이름이 비슷해서 헷갈리기 쉬운데, 핵심은 방향입니다. sscanf는 문자열에서 값을 '읽어 들이고(scanf)', sprintf는 문자열에 값을 '기록합니다(print)'.
1. 문자열을 숫자로 변환하기 — sscanf()
sscanf() 함수는 문자열에 저장된 내용을 지정한 형식(format)에 따라 읽어 들여 정수형 변수에 저장합니다. scanf()가 키보드 입력을 받는 것과 달리, sscanf()는 문자열 버퍼를 입력으로 사용한다는 점이 특징입니다.
문법
sscanf(문자열_이름, "제어_문자열", 변수_목록);
예제 코드
#include <stdio.h>
int main(void) {
char a[20] = "02 01 2010";
int day, mon, yr;
sscanf(a, "%d %d %d", &day, &mon, &yr);
printf("Day = %d\n", day);
printf("Month = %d\n", mon);
printf("Year = %d\n", yr);
return 0;
}실행 결과
Day = 2 Month = 1 Year = 2010
위 예제에서 문자열 "02 01 2010"은 %d 형식 지정자를 통해 각각 일(day), 월(mon), 연도(yr)라는 int형 변수로 분리되어 저장됩니다. 이처럼 sscanf()는 날짜나 시간처럼 하나의 문자열에 여러 값이 담겨 있을 때 특히 유용합니다.
2. 숫자를 문자열로 변환하기 — sprintf()
sprintf() 함수는 printf()와 사용법이 거의 동일하지만, 결과를 화면에 출력하는 대신 지정한 문자 배열(버퍼)에 저장한다는 점이 다릅니다. 여러 개의 숫자 값을 원하는 구분자와 함께 하나의 문자열로 조합할 때 매우 편리합니다.
문법
sprintf(문자열_이름, "제어_문자열", 변수_목록);
예제 코드
#include <stdio.h>
int main(void) {
char a[50];
int day = 2, mon = 1, yr = 2010;
sprintf(a, "%d/%d/%d", day, mon, yr);
printf("Today's date = %s\n", a);
return 0;
}실행 결과
Today's date = 2/1/2010
위 예제에서는 세 개의 정수 값이 "/" 구분자와 결합되어 "2/1/2010"이라는 하나의 날짜 문자열로 만들어졌습니다. sprintf()는 이렇게 숫자 데이터를 파일 경로, 로그 메시지, 보고서 형식 등의 문자열로 가공할 때 널리 활용됩니다.
정리
- sscanf(): 문자열 → 숫자 변환. 문자열 버퍼에서 형식에 맞게 값을 읽어 변수에 저장합니다.
- sprintf(): 숫자 → 문자열 변환. 형식화된 출력 결과를 문자 배열에 기록합니다.
참고로 단일 문자열을 정수나 실수로만 변환할 경우에는 atoi(), atol(), atof() 같은 전용 함수(stdlib.h)를 사용하는 것이 더 간단할 수 있습니다. 하지만 여러 값을 한 번에 파싱하거나 복잡한 형식의 문자열을 만들 때는 sscanf()와 sprintf()가 가장 강력하고 유연한 도구입니다.