`fputc`, `putc` 함수
fputc, putc 함수 (fputc, putc)
문자를 하나씩 파일에 써야 할 때 쓰는 함수가 fputc예요. fgetc의 쓰기 버전이라고 보면 되죠. 거의 같은 일을 하는 putc라는 매크로도 있는데, fgetc/getc처럼 매크로의 특징 때문에 주의할 점이 있어요.
출처: cppreference
본문
함수 원형
<stdio.h>에 정의돼 있어요.
int fputc( int ch, FILE* stream ); // (1)
int putc ( int ch, FILE* stream ); // (2)
설명 (Explanation)
- 문자
ch를 주어진 출력 스트림stream에 써요. fputc와 같지만,putc가 매크로로 구현되어 있다면stream을 두 번 이상 평가할 수 있어요. 그래서 해당 인자로 부수 효과(side effect)가 있는 표현식은 쓰면 안 돼요.
내부적으로, 문자는 쓰이기 직전에 unsigned char로 변환돼요.
매개변수 (Parameters)
ch— 쓸 문자stream— 출력 스트림
반환값 (Return value)
성공하면 쓴 문자를 돌려줘요.
실패하면 EOF를 돌려주고 stream에 오류 표시를 설정해요(ferror() 참고).
예제 (Example)
putc로 알파벳을 하나씩 stdout에 쓰되, 실패를 검사하는 예시예요.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int ret_code = 0;
for (char c = 'a'; (ret_code != EOF) && (c != 'z'); c++)
ret_code = putc(c, stdout);
// Test whether EOF was reached.
if (ret_code == EOF && ferror(stdout))
{
perror("putc()");
fprintf(stderr, "putc() failed in file %s at line # %d\n",
__FILE__, __LINE__ - 7);
exit(EXIT_FAILURE);
}
putc('\n', stdout);
return EXIT_SUCCESS;
}
출력:
abcdefghijklmnopqrstuvwxy
보통은 putc가 매크로로 구현되기 때문에, 부수 효과가 있는 표현식을 stream에 넘기면 문제가 생길 수 있어요. 이 예시처럼 반환값을 검사하고 ferror까지 확인해 주면 안전해요.
같이 보기 (See also)
putchar— stdout에 문자 쓰기