이번 글에서는 C 언어의 wprintf()와 wscanf() 함수에 대해 자세히 알아보겠습니다. 이 두 함수는 각각 printf()와 scanf()의 와이드 문자(wide character) 버전으로, 유니코드 등 멀티바이트 문자를 다룰 때 유용하게 사용됩니다. 두 함수 모두 wchar.h 헤더 파일에 선언되어 있습니다.
wprintf() 함수란?
wprintf() 함수는 와이드 문자열을 표준 출력(콘솔)에 출력하는 데 사용됩니다. 출력 형식을 지정하는 와이드 문자열에는 % 기호로 시작하는 다양한 서식 지정자(format specifier)가 포함될 수 있으며, 이 부분은 wprintf()에 전달된 변수 값들로 대체되어 출력됩니다.
함수 원형
int wprintf(const wchar_t* format, ...);
매개변수 설명
format: 널 문자(null terminated)로 끝나는 와이드 문자열에 대한 포인터입니다. 콘솔에 출력될 내용을 담고 있으며, 와이드 문자와 %로 시작하는 서식 지정자들이 함께 포함됩니다.
... (가변 인자): 실제로 출력할 추가 데이터들을 의미합니다. 이 값들은 format 문자열 안의 서식 지정자 순서에 따라 차례대로 대응됩니다.
반환값
함수는 성공적으로 출력된 문자 수를 반환합니다. 만약 오류가 발생하면 음수 값을 반환합니다.
wprintf() 사용 예제
#include <stdio.h>
#include <wchar.h>
main() {
wint_t my_int = 10;
wchar_t string[] = L"Hello World";
wprintf(L"The my_int is: %d \n", my_int);
wprintf(L"The string is: %ls \n", string);
}실행 결과
The my_int is: 10 The string is: Hello World
위 예제에서 볼 수 있듯이, wprintf()는 일반 printf()와 사용법이 거의 동일하지만 형식 문자열 앞에 L 접두사를 붙여 와이드 문자열임을 명시해야 합니다. 또한 와이드 문자열을 출력할 때는 %ls 서식 지정자를 사용한다는 점에 주의하세요.
wscanf() 함수란?
wscanf() 함수는 콘솔로부터 데이터를 입력받아 적절한 변수에 저장하는 역할을 합니다. 일반 scanf()와 마찬가지로, 추가 인자들은 형식 문자열 내 해당 서식 지정자가 가리키는 타입으로 이미 할당된 객체의 주소를 가리켜야 합니다.
wscanf() 사용 예제
#include <stdio.h>
#include <wchar.h>
main() {
wint_t my_int = 10;
wprintf(L"Enter a number: ");
wscanf(L"%d", &my_int);
wprintf(L"The given integer is: %d \n", my_int);
}실행 결과
Enter a number: 40 The given integer is: 40
위 예제에서는 사용자로부터 숫자 하나를 입력받아 my_int 변수에 저장한 후, 그 값을 다시 화면에 출력합니다. wscanf()도 입력받을 변수의 주소를 전달해야 한다는 점에서 scanf()와 사용 방식이 같습니다.
정리
wprintf()와 wscanf()는 각각 printf(), scanf()의 와이드 문자 전용 버전입니다. 한글, 일본어, 중국어처럼 멀티바이트 문자 체계를 다루는 프로그램을 작성할 때 wchar.h에 정의된 이 함수들을 활용하면 국제화(i18n)에 대응하는 견고한 코드를 작성할 수 있습니다. 사용 시에는 형식 문자열에 반드시 L 접두사를 붙이고, 와이드 문자열 출력에는 %ls를 사용한다는 점만 기억하면 됩니다.