C ungetc 마지막 읽은 문자 반환 함수
파일에서 읽어 들인 마지막 문자를 다시 읽을 수 있도록 해줍니다.
- 헤더: stdio.h
- 형태: int ugetc( int c, FILE *stream);
- 인수: int c 되돌릴 문자
FILE *stream 대상 파일 스트림 - 반환: int 되돌린 문자를 반환하며 오류가 발생하면 -1을 반환
파일에서 읽어 들인 마지막 문자를 다시 읽을 수 있도록 해 준다는 얘기인데, 설명보다는 예를 들어보겠습니다. 파일에 아래의 내용이 있습니다.
http://badayak.com
파일 내용에서 'b'로 시작해서 이후 문자까지 읽어 들이려 합니다. 즉, badayak.com을 구하려고 합니다.
이렇게 하려면 파일을 열고 fgetc()로 문자를 하나씩 읽어서 'b' 자 인지를 확인합니다. 'b'를 만나면 버퍼로 읽어 들이면 되는데, 문제는 첫 번째 'b'자를 이미 읽었기 때문에 그냥 읽으면 adayak.com으로 'b'가 빠집니다. 해결하는 방법은 마지막으로 읽어 들인 위치로 읽기 위치를 되도록 주면 되겠습니다. ungetc()를 사용하면 fgetc()로 읽어 들인 문자 하나를 반환하면서 파일 읽기 위치도 되돌아 갑니다.
참고: 인수 중 되돌릴 문자에 대한 설명
이전 위치로 읽기를 돌리면서 그 위치의 버퍼 내용을 채울 문자입니다. 예를 들어 파일 내용이 "wolf"이고 첫 번째 'w'를 읽었다면 ungetc( 'W', fp)를 실행하여 소문자가 아닌 대문자 "W"로 반환하고 다시 파일을 읽어 들이면 "Wolf"로 읽게 됩니다. 그러나 파일 내용이 바뀌지는 않습니다.
C언어 ungetc() 함수 예제
아래 예제 내용을 test.c로 저장했습니다. 실행하면 test.c의 내용 중 'c'로 시작하는 행을 찾고 'c'에서부터 문자열을 출력합니다.
include <stdio.h>
int main( void)
{
FILE *fp_sour;
char buff[1024];
char ch_byte;
fp_sour = fopen( "./test.c" , "r");
while( EOF != ( ch_byte = fgetc( fp_sour))){
if ('s' == ch_byte){
ungetc( 'c', fp_sour);
fgets( buff, 1024, fp_sour);
printf( "%s", buff);
}
}
fclose( fp_sour);
return 0;
}
C언어 ungetc() 함수 예제 실행 결과
]$ ./a.out
ctdio.h>
cour;
cour = fopen( "./test.c" , "r");
cour))){
c' == ch_byte){
cour);
c( buff, 1024, fp_sour);
c", buff);
ce( fp_sour);
]$
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
C언어 feof 함수 파일 끝을 확인 (0) | 2020.03.13 |
---|---|
C언어 fwrite 함수 파일에 버퍼 쓰기 (0) | 2020.03.13 |
C언어 fread 함수 파일로부터 지정한 개수만큼 자료 읽기 (0) | 2020.03.13 |