size_t fwrite ( const void * base, size_t size, size_t count, FILE * fp); 파일 스트림에 데이터를 쓰는 함수
입력 매개 변수 리스트
base 기록할 데이터가 있는 주소
size 기록할 데이터 하나의 크기
count 기록할 데이터 개수
fp 출력 파일 스트림
반환 값
성공하면 쓰기 요청한 count, count 보다 작은 값을 반환하면 에러
fwrie 함수는 메모리에 있는 내용을 그대로 파일에 덤프하는 것입니다. 따라서 메모장과 같은 텍스트 편집기로 확인하면 글자가 깨진 것처럼 보입니다. 메모장과 같은 프로그램으로 출력 파일을 열어서 확인하였을 때 글자가 깨졌다고 문제가 있는 것이 아닙니다.
사용 예
//C언어 표준 라이브러리 함수 가이드 //size_t fwrite ( const void * base, size_t size, size_t count, FILE * fp); 파일 스트림에 데이터를 쓰는 함수 //회원 데이터 배열의 내용을 파일에 기록하고 다시 읽어와서 출력 #include <stdio.h> #define MAX_NAME_LEN 20 typedef struct { char name[MAX_NAME_LEN + 1]; int age; }Member; #define MAX_MEMBERS 10 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", "wb"); if (fp == NULL) { perror("error fopen"); return; } //출력 파일 스트림에 members 배열의 내용 출력 if (fwrite(members, sizeof(Member), MAX_MEMBERS, fp) != MAX_MEMBERS) { printf("출력 오류\n"); return; } fclose(fp);//출력 파일 스트림 닫기 //읽기 모드로 파일 열기 fopen_s(&fp, "data.txt", "rb"); if (fp == NULL) { perror("error fopen"); return; } //파일에서 members2 배열로 데이터 읽기 fread(members2, sizeof(Member), MAX_MEMBERS, fp); //읽어온 데이터 출력 printf("%-10s %-10s\n", "이름", "나이"); for (i = 0; i<MAX_MEMBERS; i++) { printf("%-10s %-10d\n", members2[i].name, members2[i].age); } fclose(fp); //입력 파일 스트림 닫기 return 0; }
출력
이름 나이 홍길동 20 강감찬 15 을지문덕 22 이순신 19 김구 30 안중근 30 박찬호 35 김연아 17 아이유 20 주니엘 20
새로 만들어진 output.txt 내용
홍길동 儆? 강감찬 儆? 을지문덕 儆? 이순신 儆? 김구 儆? 안중근 儆? 박찬호 儆? 김연아 儆? 아이유 儆? 주니엘 儆?