일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Windows Forms
- 표준 라이브러리 함수
- c언어
- 네트워크 프로그래밍
- 무료 동영상 강의
- 안드로이드 앱 개발
- 원격 제어 프로그램
- 소스 코드
- 캡슐화
- 유튜브 동영상 강의
- 알고리즘
- 충남 천안
- 산책하기 좋은 곳
- 파이썬
- 추천
- 표준 입출력
- 동영상
- 졸업 작품 소재
- 실습으로 다지는 c#
- 프로젝트
- 동영상 강의
- c#
- 언제나 휴일
- C++
- 클래스 다이어그램
- 강의
- 졸업 작품
- 소켓 통신
- 실습
- 언제나휴일
Archives
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
fscanf 함수, fscanf_s 함수 [C언어 표준 라이브러리 함수] 본문
int fscanf (FILE * fp ,const char *format,…); 파일 스트림에 포멧을 지정하여 읽는 함수
입력 매개 변수 리스트
fp 입력 파일 스트림
format 포멧 문자열
… 가변 인자 리스트
반환 값
성공 시 변환 성공 개수, 오류 시 EOF
fscanf 함수도 scanf 함수처럼 문자열을 읽어올 때 버퍼 크기를 전달하지 않아 버퍼 오버플로우 문제가 발생할 수 있습니다. C11에서는 이를 개선한 fscanf_s를 제공합니다.
사용 예
//C언어 표준 라이브러리 함수 가이드
//int fscanf (FILE * fp ,const char *format,...); 파일 스트림에 포멧을 지정하여 읽는 함수
//회원 정보를 파일에 쓴 후에 다시 읽어와서 출력
#pragma warning(disable:4996)
#include <stdio.h>
#define MAX_MEMBERS 10
#define MAX_NAME_LEN 20
//회원 구조체 정의
typedef struct {
char name[MAX_NAME_LEN + 1];
int age;
}Member;
int main(void)
{
FILE * fp;
int i;
//원본 회원 배열
Member members[MAX_MEMBERS] =
{
{ "홍길동",20 },{ "강감찬",15 },{ "을지문덕",22 },{ "이순신",19 },{ "김구",30 },
{ "안중근",30 },{ "박찬호",35 },{ "김연아",17 },{ "아이유",20 },{ "주니엘",20 }
};
//읽어올 회원 배열
Member members2[MAX_MEMBERS];
//쓰기 모드로 파일 열기
fopen_s(&fp, "data.txt", "w");
if (fp == NULL)
{
perror("error fopen");
return;
}
//전체 회원 정보를 파일에 쓰기
for (i = 0; i<MAX_MEMBERS; i++)
{
fprintf(fp, "%-10s %-10d\n", members[i].name, members[i].age);
}
fclose(fp);//파일 스트림닫기
//읽기 모드로 파일 열기
fopen_s(&fp, "data.txt", "r");
if (fp == NULL)
{
perror("error fopen");
return;
}
//장식을 위한 출력
printf("%-10s %-10s\n", "이름", "나이");
//입력 파일 스트림에서 포멧에 맞게 회원 정보 읽어온 후에 출력 반복
for (i = 0; i<MAX_MEMBERS; i++)
{
fscanf(fp, "%s %d\n", members2[i].name, &members2[i].age);
printf("%-10s %-10d\n", members2[i].name, members2[i].age);
}
fclose(fp);//파일 스트림 닫기
return 0;
}
출력
이름 나이
홍길동 20
강감찬 15
을지문덕 22
이순신 19
김구 30
안중근 30
박찬호 35
김연아 17
아이유 20
주니엘 20
새로 만들어진 data.txt 내용
홍길동 20
강감찬 15
을지문덕 22
이순신 19
김구 30
안중근 30
박찬호 35
김연아 17
아이유 20
주니엘 20
int fscanf_s (FILE * fp ,const char *format,…); 파일 스트림에 포멧을 지정하여 읽는 함수
입력 매개 변수 리스트
fp 입력 파일 스트림
format 포멧 문자열
… 가변 인자 리스트
반환 값
성공 시 변환 성공 개수, 오류 시 EOF
C11 표준에서 fscanf의 버퍼 오버플로우 문제를 개선한 함수입니다. 문자열이나 문자를 입력받을 때는 버퍼의 크기를 전달합니다.
사용 예
//C언어 표준 라이브러리 함수 가이드
//int fscanf_s(FILE * fp, const char *format, ...); 파일 스트림에 포멧을 지정하여 읽는 함수
//회원 정보를 파일에 쓴 후에 다시 읽어와서 출력
#include <stdio.h>
#define MAX_MEMBERS 10
#define MAX_NAME_LEN 20
//회원 구조체 정의
typedef struct {
char name[MAX_NAME_LEN + 1];
int age;
}Member;
int main(void)
{
FILE * fp;
int i;
//원본 회원 배열
Member members[MAX_MEMBERS] =
{
{ "홍길동",20 },{ "강감찬",15 },{ "을지문덕",22 },{ "이순신",19 },{ "김구",30 },
{ "안중근",30 },{ "박찬호",35 },{ "김연아",17 },{ "아이유",20 },{ "주니엘",20 }
};
//읽어올 회원 배열
Member members2[MAX_MEMBERS];
//쓰기 모드로 파일 열기
fopen_s(&fp, "data.txt", "w");
if (fp == NULL)
{
perror("error fopen");
return;
}
//전체 회원 정보를 파일에 쓰기
for (i = 0; i<MAX_MEMBERS; i++)
{
fprintf(fp, "%-10s %-10d\n", members[i].name, members[i].age);
}
fclose(fp);//파일 스트림닫기
//읽기 모드로 파일 열기
fopen_s(&fp, "data.txt", "r");
if (fp == NULL)
{
perror("error fopen");
return;
}
//장식을 위한 출력
printf("%-10s %-10s\n", "이름", "나이");
//입력 파일 스트림에서 포멧에 맞게 회원 정보 읽어온 후에 출력 반복
for (i = 0; i<MAX_MEMBERS; i++)
{
fscanf_s(fp, "%s %d\n", members2[i].name, MAX_NAME_LEN, &members2[i].age);
printf("%-10s %-10d\n", members2[i].name, members2[i].age);
}
fclose(fp);//파일 스트림 닫기
return 0;
}
출력
이름 나이
홍길동 20
강감찬 15
을지문덕 22
이순신 19
김구 30
안중근 30
박찬호 35
김연아 17
아이유 20
주니엘 20
새로 만들어진 data.txt 내용
홍길동 20
강감찬 15
을지문덕 22
이순신 19
김구 30
안중근 30
박찬호 35
김연아 17
아이유 20
주니엘 20
'C & C++ > C언어 표준 라이브러리 함수' 카테고리의 다른 글
fflush 함수 [C언어 표준 라이브러리 함수] (0) | 2024.02.02 |
---|---|
vprintf 함수 [C언어 표준 라이브러리 함수] (0) | 2024.02.02 |
sscanf 함수, sscanf_s 함수 [C언어 표준라이브러리 함수] (0) | 2024.02.02 |
sprintf 함수, sprintf_s 함수 [C언어 표준 라이브러리 함수] (0) | 2024.02.01 |
fgets 함수 [C언어 표준 라이브러리 함수] (1) | 2024.01.31 |
fgetc 함수, getc 매크로 함수 [C언어 표준 라이브러리 함수] (0) | 2024.01.31 |
fprintf 함수 [C언어 표준 라이브러리 함수] (1) | 2024.01.30 |
fputs 함수 [C언어 표준라이브러리 함수] (0) | 2024.01.30 |