int fscanf_s (FILE * fp ,const char *format,…); 파일 스트림에 포멧을 지정하여 읽는 함수
입력 매개 변수 리스트
fp 입력 파일 스트림
format 포멧 문자열
… 가변 인자 리스트
반환 값
성공 시 변환 성공 개수, 오류 시 EOF
C11 표준에서 fscanf의 버퍼 오버플로우 문제를 개선한 함수입니다. 문자열이나 문자를 입력받을 때는 버퍼의 크기를 전달합니다.
사용 예
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
//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; } |
출력
1 2 3 4 5 6 7 8 9 10 11 |
이름 나이 홍길동 20 강감찬 15 을지문덕 22 이순신 19 김구 30 안중근 30 박찬호 35 김연아 17 아이유 20 주니엘 20 |
새로 만들어진 data.txt 내용
1 2 3 4 5 6 7 8 9 10 |
홍길동 20 강감찬 15 을지문덕 22 이순신 19 김구 30 안중근 30 박찬호 35 김연아 17 아이유 20 주니엘 20 |