인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

alphacjh님의 프로필 이미지
alphacjh

작성한 질문수

홍정모의 따라하며 배우는 C언어

13.4 텍스트 파일 입출력 함수들

buffer와 file stream에 대한 질문

작성

·

301

0

안녕하세요! scanf의 경우 입력 buffer에서 하나씩 읽으며, 읽은 문자가 buffer에서 빠져나가는데,

fscanf의 경우도 마찬가지로 주어진 format을 따라 하나씩 읽으며 file stream에서 빠져나가게 되나요??

답변 2

2

fclose()로  닫아야 합니다.

https://www.gnu.org/software/libc/manual/html_node/Closing-Streams.html

 

다만 stream을 특정 변수에 담으면 얼마든 값을 활용할 수 있습니다.

아래 예제의 경우,

(my_file.txt에는 문자열 "Hello" 가 저장되어 있다고 가정해보겠습니다.)

 

아래와 같이 문자형 배열 s1에 파일 값을 입력받은 경우

얼마든지 s1 을 재활용해서 사용할 수 있습니다.

 

#define _CRT_SECURE_NO_WARNINGS    
#include <stdio.h>  
int main()
{
	char s1[10];
	char s2[10];

	int num1;

	FILE *fp = fopen("my_file.txt", "r"); 

	fscanf(fp, "%s", s1);   
	printf("%s\n", s1);
	strncpy(s2, s1, 10);

	printf("%s\n", s2);
	fclose(fp);   

	return 0;
}

0

alphacjh님의 프로필 이미지
alphacjh
질문자

구글에서 stdio.h 헤더파일을 보면서 생긴 궁금증입니다.

fseek 함수는 file position을 주어진 offset으로 옮긴다고 나와있습니다.

그러면, 

char s1[10];

char s2[10];

 

FILE* fp = fopen("임의의 파일 이름", "r");

fscanf(fp, "%d%*c",  s1);

fscanf(fp, "%[^\n]%*c",  s2);

이런식으로 있으면 두번째 fscanf는 첫번째 fscanf가 읽다가 멈춘 file position 부터 읽기 시작하는건가요??

 

네 그렇습니다

위 fscanf의 fp와 

아래 fscanf의 fp 위치는 다릅니다.

직접 printf로 확인해보셔도 좋습니다:) 

alphacjh님의 프로필 이미지
alphacjh
질문자

감사합니다!!!

alphacjh님의 프로필 이미지
alphacjh

작성한 질문수

질문하기