`fputwc`, `putwc` 함수
fputwc, putwc 함수 (fputwc, putwc)
넓은 문자(wide character)를 파일에 써야 할 때 사용하는 함수가 fputwc예요. fputc의 넓은 문자 버전이죠. 다국어 문자, 이모지 같은 것까지 wchar_t 단위로 출력할 수 있어요. putwc는 매크로로 구현될 수 있는 짝 함수예요.
출처: cppreference
본문
함수 원형
<wchar.h>에 정의돼 있어요. (C95부터)
wint_t fputwc( wchar_t ch, FILE* stream ); // (1) (since C95)
wint_t putwc ( wchar_t ch, FILE* stream ); // (2) (since C95)
설명 (Explanation)
- 넓은 문자
ch를 주어진 출력 스트림stream에 써요. fputwc와 같지만,putwc가 매크로로 구현되어 있다면stream을 두 번 이상 평가할 수 있어요.
매개변수 (Parameters)
ch— 쓸 넓은 문자stream— 출력 스트림
반환값 (Return value)
성공하면 ch의 복사본을 돌려줘요.
실패하면 WEOF를 돌려주고 stream에 오류 표시를 설정해요(ferror() 참고). 인코딩 오류가 발생했다면 추가로 errno를 EILSEQ로 설정해요.
예제 (Example)
UTF-8 로케일을 설정하고 이모지 하나를 stdout에 쓰는 예시예요. 실패하면 WEOF인지, 그것이 인코딩 오류인지 일반 I/O 오류인지 구분해 보여 줘요.
#include <errno.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
int main(void)
{
setlocale(LC_ALL, "en_US.utf8");
errno = 0;
if (fputwc(L'🍌', stdout) == WEOF)
{
if (errno == EILSEQ)
puts("Encoding error in fputwc.");
else
puts("I/O error in fputwc.");
return EXIT_FAILURE;
}
}
가능한 출력:
🍌
여기서도 로케일 설정이 핵심이에요. 넓은 문자를 출력할 때는 현재 로케일의 인코딩으로 변환되기 때문에, 로케일을 제대로 설정해 주지 않으면 의도한 대로 안 나올 수 있어요.
같이 보기 (See also)
fputc/putc— 파일 스트림에 문자 쓰기fputws— 파일 스트림에 넓은 문자열 쓰기fgetwc/getwc— 파일 스트림에서 넓은 문자 가져오기