• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

buffer와 file stream에 대한 질문

22.06.06 15:13 작성 조회수 168

0

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

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

답변 2

·

답변을 작성해보세요.

2

강민철님의 프로필

강민철

2022.06.07

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

질문자

2022.06.08

구글에서 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 부터 읽기 시작하는건가요??

 

강민철님의 프로필

강민철

2022.06.08

네 그렇습니다

위 fscanf의 fp와 

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

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

alphacjh님의 프로필

alphacjh

질문자

2022.06.09

감사합니다!!!