작성
·
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
구글에서 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로 확인해보셔도 좋습니다:)